问题描述
我对Zephyr来说还很陌生,在同级文件夹中添加和编译代码时遇到了麻烦。使用PlatformIO可能会使情况更加复杂,该平台的构建结构与库存Zephyr结构略有不同。
代码的结构为:
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