如何在CMake子库中正确引用Pico-SDK库?
问题解决方法
你的问题出在bme68x子库的CMake配置未关联Pico SDK的依赖组件,导致编译子库时无法找到hardware/i2c.h和pico/stdlib.h的头文件路径。主项目能正常编译是因为主target通过target_link_libraries关联了这些组件,自动导入了对应的头文件目录,但子库未做同样配置。
修改bme68x/CMakeLists.txt,补充以下配置:
add_library( bme68x bme68x_defs.h bme68x.h bme68x.c bme68x_API.h bme68x_API.c ) # 关联Pico SDK依赖,自动导入头文件路径 target_link_libraries(bme68x PRIVATE pico_stdlib hardware_i2c ) # 让主项目能直接引用子库的头文件(可选,但更规范) target_include_directories(bme68x PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
配置说明:
target_link_libraries(bme68x PRIVATE ...):给bme68x库添加依赖,Pico SDK的组件会自动把自身的头文件目录注入到库的编译包含路径中,编译bme68x_API.c时就能找到目标头文件。target_include_directories(bme68x PUBLIC ...):将子库的当前目录设为公共包含目录,主项目中可直接用#include "bme68x_API.h"引用子库头文件,无需写相对路径。
修改后重新生成CMake缓存并编译即可解决问题。
内容的提问来源于stack exchange,提问作者Francesco Biancucci
相关产品推荐
相关产品推荐

