如何在ESP-IDF的idf_component_register函数中正确使用SRC_DIRS参数
ESP-IDF + PlatformIO 批量添加源文件的正确配置方法
以下分两种常用场景给出可直接复用的配置方案:
场景1:原生ESP-IDF项目(含PlatformIO下的ESP-IDF原生组件配置)
在对应目录的CMakeLists.txt中使用idf_component_register的SRC_DIRS参数即可,正确写法参考:
idf_component_register( # 批量添加当前目录下src、utils两个文件夹内的所有源文件 SRC_DIRS "./src" "./utils" # 可选:排除不需要编译的指定文件 EXCLUDE_SRCS "./src/test_demo.c" "./utils/debug_tool.c" # 同步添加头文件搜索路径 INCLUDE_DIRS "." "include" "./src/include" )
注意事项:
SRC_DIRS后跟的路径为相对于当前CMakeLists.txt所在目录的相对路径,注意不要写错目录层级- 不要同时将单个源文件和它所属的目录都添加到编译规则中,会触发重复定义报错
- 如果是自定义组件,需要先在项目根目录的
CMakeLists.txt中添加组件路径,放在include($ENV{IDF_PATH}/tools/cmake/project.cmake)之前:set(EXTRA_COMPONENT_DIRS ./components ./my_custom_lib)
场景2:直接在PlatformIO配置文件中配置(更适合新手)
不需要修改CMakeLists,直接修改项目根目录的platformio.ini,添加build_src_filter参数即可批量添加指定目录的源文件:
[env:esp32dev] platform = espressif32 board = esp32dev framework = espidf ; 递归添加src目录、drivers目录、utils目录下的所有源文件 build_src_filter = +<src/**/*> +<drivers/**/*> +<utils/**/*> ; 可选:过滤不需要编译的文件 ; build_src_filter = +<src/**/*> -<src/test/*>
语法说明:
+<路径>代表添加对应路径的文件,-<路径>代表过滤对应路径的文件,**代表递归匹配所有子目录。
常见配置不生效的排查点
- 所有路径不要包含中文、空格、特殊字符,会导致CMake路径解析失败
- 修改配置后先执行清理操作(原生ESP-IDF执行
idf.py fullclean,PlatformIO点击Clean按钮),再重新编译,未清理缓存会导致新配置不生效 - 头文件路径需要同步添加,否则会报头文件找不到的错误
内容的提问来源于stack exchange,提问作者Valera P.
相关产品推荐
相关产品推荐

