首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zephyr / PlatformIO / CMake /外部代码

Zephyr / PlatformIO / CMake /外部代码
EN

Stack Overflow用户
提问于 2020-08-20 15:43:56
回答 1查看 728关注 0票数 0

我对Zephyr非常陌生,在兄弟文件夹中添加和编译代码时遇到了困难。使用PlatformIO可能会使这一问题更加复杂,它的构建结构与股Zephyr结构略有不同。

IDE是Windows下的Visual代码

守则的结构如下:

代码语言:javascript
复制
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

我想要做的是将源文件或静态库从zephyr_project添加到ext_library中,手动复制源文件/包含文件,或者手动构建库并复制它。

到目前为止我尝试过的是:

  • 在文件中添加到ext_library的路径(GLOB.)命令在zephyr_project/zephyr/CMakeList.txt.中使用。此命令从zephyr_project/source,提取源文件,但似乎不喜欢编译静态库的ext_library中的CMakeList.txt的相对路径或静态路径。这还需要对zephyr CMakeLists.txt文件使用CMakeLists.txt。这似乎没有编译库,但是它似乎找到了ext_library/CMakeLists.txt.这方面的证据在zephyr_project/lib文件夹中,其中有些CMake文件夹为空,但名称与ext_library/CMakeLists.txt.相同。其他证据是信息(.)两个printed.
  • Using中的命令都是静态的和相对于ext_library cmake文件的路径(复制.),文件没有被复制。没有明显的错误。

起作用的是:手动将代码从ext_library/sourceext_library/include复制到zephyr_project.中的适当文件夹中

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

代码语言:javascript
复制
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在运行时确实指向正确的目录,通过已删除的消息(.)进行确认)(伐木)

代码语言:javascript
复制
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
)

非常感谢你对解决这个问题的任何建议或暗示,奥斯汀。

EN

回答 1

Stack Overflow用户

发布于 2020-12-01 01:23:22

我找到了解决办法:

代码语言:javascript
复制
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}
    )

并在.gitignore中添加src/libs_tmp。我知道这是一种丑陋的方式,但它起作用了:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63508673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档