0

我对 Zephyr 很陌生,在兄弟文件夹中添加和编译代码时遇到了麻烦。使用 PlatformIO 可能会使这更加复杂,它的构建结构与普通的 Zephyr 结构略有不同。

IDE是Windows下的Visual Studio Code

代码结构如下:

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 。这也需要在 zephyr CMakeLists.txt 文件中使用add_subdirectory 。这似乎没有编译库,但是,它似乎找到了ext_library/CMakeLists.txt。这方面的证据在zephyr_project/lib文件夹中,其中包含一些空的 CMake 文件夹,但名称与ext_library/CMakeLists.txt相同。其他证据是正在打印两个 CMakeLists.txt 中的 message(...) 命令。
  • 使用ext_library文件夹的静态和相对路径。
  • 使用 cmake FILE(COPY ...),文件没有被复制。没有明显的错误。

什么有效:手动将代码从ext_library/sourceext_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 在运行时确实指向正确的目录,已通过删除的 message(...) 日志记录确认)

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
)

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

4

1 回答 1

0

我找到了解决方法:

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

SET(LIB_PATH ../../libs/)
FILE(GLOB lib_sources ${LIB_PATH}*.*)
FILE(COPY ${lib_sources} DESTINATION ../../../src/libs_tmp)

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

include_directories(${LIB_PATH})
target_sources(app PRIVATE 
    ${app_sources}
    )

并将 src/libs_tmp 添加到 .gitignore。我知道这是丑陋的方式,但它有效:-P

于 2020-12-01T01:23:22.383 回答