Zephyr / PlatformIO / CMake /外部代码

问题描述

我对Zephyr来说还很陌生,在同级文件夹中添加和编译代码时遇到了麻烦。使用PlatformIO可能会使情况更加复杂,该平台的构建结构与库存Zephyr结构略有不同。

IDE是Windows下的Visual Studio代码

代码的结构为:

Parent Folder
|-ext_library (contains CMakeList.txt)
|--source
|--include
|-zephyr_project (structure generated by PlatformIO)
|--zephyr (contains the master CMakeList.txt and prj.conf)
|--source
|--include
|--lib

我想要做的是将源文件或静态库从 ext_library 添加 zephyr_project ,而无需手动复制源/包含文件或手动构建库,并且复制过来。

到目前为止我已经尝试过:

  • zephyr_project / zephyr / CMakeList.txt 中的FILE(GLOB ...)命令中为 ext_library 添加路径。该命令将 zephyr_project / source 中的源文件,但似乎不喜欢 ext_library 的相对路径或静态路径。
  • ext_library 添加CMakeList.txt,以编译静态库。这还需要使用 add_subdirectory zephyr CMakeLists.txt文件。这似乎没有编译库, 但是,它似乎找到了 ext_library / CMakeLists.txt 。 证据在 zephyr_project / lib 文件夹中,该文件夹包含一些CMake文件夹,这些文件夹为空,但命名为 ext_library / CMakeLists.txt 。其他证据是 在两个CMakeLists.txt中的message(...)命令都将被打印。
  • 使用到 ext_library 文件夹的静态和相对路径。
  • 使用cmake FILE(copY ...),未复制文件。没有明显的错误

有效的方法: 将 ext_library / source ext_library / include 中的代码手动复制到 zephyr_project 中的相应文件夹中。

其他信息: zephyr_project / zephyr / CMakeLists.txt (原始+尝试将ext_library添加为子目录)

cmake_minimum_required(VERSION 3.13.1)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_ScopE)
project(firmware)

set(EXT_LIB "C:/Users/mcelr/Desktop/project/ext_library")
add_subdirectory(${EXT_LIB} ${PROJECT_SOURCE_DIR})

FILE(GLOB app_sources 
    "../src/*.c*"
)

ext_library / CMakeLists.txt (CMAKE_CURRENT_SOURCE_DIR在运行时确实指向正确的目录,已通过删除的消息(...)记录确认)

cmake_minimum_required(VERSION 3.13.1)
project(ext_lib)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
set(LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
add_library(ext_lib_zephyr STATIC
    ${CMAKE_CURRENT_SOURCE_DIR}/source/packet.c
    ${CMAKE_CURRENT_SOURCE_DIR}/source/checksum.c
)

非常感谢您提供解决此问题的任何建议或提示, 奥斯丁

解决方法

我找到了解决方法:

public static void play(){
//create scanner,variables and a random number
    Scanner scanner = new Scanner (System.in);
    Random generator = new Random();
    int number =generator.nextInt(100) + 1;
    int count = 0;
    boolean game = true;

    //prompt user to enter a number
    System.out.println("Please guess the number.(Enter -1 to quit): ");

    while(game){

        //user enters a number
        int guess = scanner.nextInt();

        //if user enters -1,the game ends
        if(guess == -1){
            break;
        }

        //guessed number is out of range
        if(guess>100 || guess<0){
            System.out.println("The number should be between 0 and 100.");
        }

        //guessed number is smaller than the random number
        if(guess < number && 0 <= guess && guess <= 100 ){
            count++;
            System.out.println("That is too low. Please try again.(Enter -1 to quit):");
        }

        // guessed number is bigger than the random number
        else if(guess > number && 0 <= guess && guess <= 100){
            count++;
            System.out.println("That is too high. Please try again.(Enter -1 to quit):");
        }

        //guessed number is the same as the random number
        else if(guess==number) {
            count++;

            //displays the message and the attempt count
            System.out.println("Congratulations! You got the correct number.");
            System.out.println("Your attempt was " + count + " tries.");

       }

    }
}

并将src / libs_tmp添加到.gitignore。我知道这很丑陋,但效果很好:-P