当前位置: 首页 > 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.jsqmd.com/news/1013341/

相关文章:

  • 深入解析PowerPC MPC823指令时序与中断处理机制
  • PyPDF终极实战指南:5步掌握Python PDF处理库的高效使用
  • 温州空调检修、线路老化排查,家电维修便民服务指南 - 金修达家庭维修
  • MPC8245 JTAG与监视点:硬件级调试的实战指南
  • 富阳区处理古驰马鞍包迪奥戴妃,奢二网点成色判定标准透明 - 讯息早知道
  • 2026澳洲留学中介排名怎么判断:案例库规模、服务边界与收费透明度 - 速递信息
  • 5分钟掌握网盘直链下载助手:8大平台高速下载的终极指南
  • 温州水电维修服务推荐、2026正规水电维修公司上门收费标准 - 我叫一
  • 终极指南:如何使用go-cursor-help永久解决Cursor试用限制问题
  • 【信息科学与工程学】计算机科学与自动化 第二百零二篇 DDR内存芯片中的学科知识01
  • 闲置翡翠回血避坑!青岛 6 家同城回收门店亲测甄选 - 讯息早知道
  • 2026 青岛翡翠回收排名 6 家本地门店实测盘点 - 讯息早知道
  • 2026深圳奢饰珠宝实测:逸程全套配件15%溢价合规兑现 - 逸程
  • AI每天都在帮我干活,可我总想看看它上班摸鱼没有——于是给OpenClaw装了个像素办公室
  • PowerPC G4+微架构解析:从超标量流水线到AltiVec向量优化
  • String的isEmpty与equals(““)的区别
  • 专业定制超级电容器公司推荐 - 品牌排行榜
  • 2026苏州通下水道/洗菜池公司横向测评:价格、速度、售后、有没有加价——6家打分详情 - 速递信息
  • 20公斤走物流还是快递?20公斤寄什么划算?物流还是快递,比价后选寄半折 - 快递物流资讯
  • 2026全年天津律所律师口碑榜!维益第三者返还财产/婚内过错取证/损害赔偿 - 速递信息
  • 全志buildroot开发 板级电源适配
  • 2026厦门名表回收权威实测TOP7:仪器无损鉴表防套路,正规连锁出手更安心 - 薛定谔的梨花猫
  • 30分钟从零到多语言:为Paperless-ngx配置全球文档管理能力
  • 2026 年上海空调维修・线路老化・家电维修服务指南 入夏正规服务商甄选指南 - 金修达家庭维修
  • 河北圣天管件集团有限公司 - 速递信息
  • 广州南沙区搬家公司预警:今日暴雨、大暴雨来袭,别墅/写字楼搬迁全面风险提示与专业处置方案 - 从来都是英雄出少年
  • MPC8272 PCI桥接器实战解析:从协议原理到驱动配置
  • 广州白云区搬家公司推荐 端午节工人连休3天不调休,高端别墅/写字楼搬迁完整避坑实操指南 - 从来都是英雄出少年
  • 2026奢侈品回收手表回收名表回收|廊坊市广阳区奢侈品包包回收 优选万达广场毓典寄卖行 - 速递信息
  • 终极指南:如何快速上手Bosca Ceoil Blue - 免费开源音乐创作工具