当前位置: 首页 > news >正文

CMake 4.0.3 + ESP-IDF v6.0.1 下 SRCS_DIRS 不生效导致构建失败

芯片:ESP32-S3N16R8
IDF 版本:v6.0.1
CMake 版本:4.0.3
编译器:xtensa-esp32s3-elf-gcc 15.2.0
时间:2026-06-14


现象

idf.py build 在 CMake 配置阶段报错:

CMake Error at C:/esp/v6.0.1/esp-idf/tools/cmake/component.cmake:703 (target_compile_options):target_compile_options may only set INTERFACE properties on INTERFACE targets
Call Stack (most recent call first):components/BSP/CMakeLists.txt:12 (component_compile_options)

出错的 CMakeLists.txt

set(src_dirs Scr)set(include_dirs Inc)set(requires driver)idf_component_register(SRCS_DIRS ${src_dirs}     # ← 问题在这里INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})component_compile_options(-ffast-math -O3 -Wno-error=format -Wno-format)

根因

SRCS_DIRS 内部通过 file(GLOB) 搜索 *.c 文件:

# ESP-IDF component.cmake 内部实现 (__component_add_sources 宏)
file(GLOB dir_sources "${abs_dir}/*.c" "${abs_dir}/*.cpp" "${abs_dir}/*.S")if(dir_sources)foreach(src ${dir_sources})list(APPEND sources "${src}")endforeach()
else()message(WARNING "No source files found for SRC_DIRS entry '${dir}'.")
endif()

CMake 4.0.3 + Windows 环境下,宏作用域内的 file(GLOB) 未能将结果正确回传到 idf_component_register 函数的 sources 变量中。

由于 sources 为空,idf_component_register 将组件创建为 INTERFACE library(header-only):

# idf_component_register 内部
if(sources OR __EMBED_FILES OR __EMBED_TXTFILES)add_library(${component_lib} STATIC ${sources})
else()add_library(${component_lib} INTERFACE)  # ← 走到这里
endif()

随后 component_compile_options 尝试对 INTERFACE target 设置 PRIVATE 编译选项,CMake 直接报错:

function(component_compile_options)target_compile_options(${COMPONENT_LIB} PRIVATE ${ARGV})# INTERFACE target 不接受 PRIVATE → 报错
endfunction()

修复

用显式 SRCS 替代 SRCS_DIRS,绕过 file(GLOB)

set(srcs "Scr/led.c")set(include_dirs Inc)set(requires esp_driver_gpio)idf_component_register(SRCS ${srcs}            # ← 显式指定源文件INCLUDE_DIRS ${include_dirs}REQUIRES ${requires})component_compile_options(-ffast-math -O3 -Wno-error=format -Wno-format)

总结

写法 结果
SRCS_DIRS Scr CMake 4.0.3 下 file(GLOB) 不回传结果,组件变 INTERFACE,component_compile_options 报错
SRCS "Scr/led.c" 正常工作,组件注册为 STATIC library

SRCS_DIRS 本身没有问题,是 CMake 4.0.3 宏作用域 + file(GLOB) + ESP-IDF 的特定调用链组合导致的兼容性缺陷。当组件源文件较少时,直接用 SRCS 显式列举反而更清晰可靠。

http://www.zskr.cn/news/1525158.html

相关文章:

  • 深入解析PowerPC MPC823指令时序与中断处理机制
  • 温州空调检修、线路老化排查,家电维修便民服务指南 - 金修达家庭维修
  • 2026澳洲留学中介排名怎么判断:案例库规模、服务边界与收费透明度 - 速递信息
  • 富阳区处理古驰马鞍包迪奥戴妃,奢二网点成色判定标准透明 - 讯息早知道
  • 【信息科学与工程学】计算机科学与自动化 第二百零二篇 DDR内存芯片中的学科知识01
  • 2026深圳奢饰珠宝实测:逸程全套配件15%溢价合规兑现 - 逸程
  • 全志buildroot开发 板级电源适配
  • PowerPC G4+微架构解析:从超标量流水线到AltiVec向量优化
  • 2026厦门名表回收权威实测TOP7:仪器无损鉴表防套路,正规连锁出手更安心 - 薛定谔的梨花猫
  • 30分钟从零到多语言:为Paperless-ngx配置全球文档管理能力
  • 2026 年上海空调维修・线路老化・家电维修服务指南 入夏正规服务商甄选指南 - 金修达家庭维修
  • 河北圣天管件集团有限公司 - 速递信息
  • 广州南沙区搬家公司预警:今日暴雨、大暴雨来袭,别墅/写字楼搬迁全面风险提示与专业处置方案 - 从来都是英雄出少年
  • 北京黄金回收去哪靠谱?2026年6月这家门店覆盖全城,上门最快30分钟到 - 速递信息
  • 终极指南:如何快速上手Bosca Ceoil Blue - 免费开源音乐创作工具
  • MPC8272 CPM架构解析:嵌入式通信协处理器的核心原理与实战配置
  • 2026年宿迁SCMP供应链管理专家试听课和资料怎么领取?众智商学院官网400冯老师班期说明 - 众智商学院官方
  • 2026阳山县本地除甲醛公司怎么选?专业测评:清远佰家环保优先推荐 - 专注室内空气检测治理
  • 海外仓网站建设如何获取跨境卖家客户? - 外贸营销驿站
  • 终极指南:5步高效解决Edge-TTS语音合成常见错误与优化方案
  • 2026 年可用稳定的网页托管服务
  • 2026 年保定入夏空调检修、线路老化排查 正规家电维修服务商甄选指南 - 金修达家庭维修
  • AI过程挖掘:从系统日志还原业务流程真实态
  • 专业级QQ音乐解析工具:Python实现无损下载与批量处理方案
  • 2026深圳轻奢首饰实测:宝格丽卡地亚蒂芙尼回收,上门透明结款 - 逸程
  • 如何在ESP32项目中快速实现4G移动网络连接:ML307模块完整指南
  • 30个免费Illustrator脚本:如何让你的设计效率提升300%
  • Web Animations API 深度实践:从关键帧到时序控制的浏览器原生动画引擎
  • 杭州奢侈品钻石首饰黄金回收本地实体,高价回收卡地亚梵克雅宝宝格丽珠宝 - 讯息早知道
  • Umi-CUT批量图片处理终极指南:5分钟学会智能去黑边与裁剪