Eclipse esp-idf环境添加新组件时出现__idf_main重复等CMake报错
错误原因
- 目标重名报错:新增组件时触发了main组件重复注册逻辑,常见原因是自定义组件嵌套在main目录内,或者main目录的CMakeLists.txt、项目顶层CMakeLists.txt中重复调用了组件注册相关函数,和ESP-IDF默认自动识别main组件的逻辑冲突。
- 路径不存在报错:main目录的CMakeLists.txt中调用
idf_component_register时声明了INCLUDE_DIRS include参数,但实际main目录下未创建对应的include文件夹,CMake扫描时找不到对应路径触发报错。
修复步骤
- 处理路径不存在问题:
打开main/CMakeLists.txt,如果你的main组件不需要对外提供头文件,直接删除idf_component_register参数中的INCLUDE_DIRS include即可;如果需要用到该目录,直接在main文件夹下新建名为include的空文件夹即可。 - 处理目标重名问题:
- 确认所有自定义组件都存放在项目根目录下,和main目录平级,不要嵌套在main目录内部
- 检查项目顶层CMakeLists.txt,仅保留标准ESP-IDF项目配置语句即可,不要额外添加
add_subdirectory(main)或者重复注册main组件的逻辑,标准顶层配置参考如下:
cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(Smart-Prob)
- 检查main目录下的CMakeLists.txt,确认仅调用了一次
idf_component_register函数,没有重复声明。
- 全部修改完成后,删除项目根目录下的
build文件夹清空构建缓存,再重新执行构建操作即可。
内容的提问来源于stack exchange,提问作者Luqman sadozai
相关产品推荐
相关产品推荐

