如何修改CMake ExternalProject_Add的编译选项/设置/属性?
修改CMake ExternalProject_Add创建的子项目编译设置(以Pico-SDK的PioasmBuild为例)
核心结论
修改操作必须在include(pico_sdk_import.cmake)之前进行——因为include执行后,FindPioasm.cmake已经完成了ExternalProject_Add的定义,后续设置无法覆盖已生成的子项目配置。
具体实现方法
ExternalProject_Add创建的是独立的CMake构建环境,主项目的set_source_files_properties等常规编译属性设置无法穿透到子项目,必须通过向子项目的CMake构建过程传递参数实现:
方法1:全局设置编译选项(简单但影响所有项目)
如果不介意影响其他外部项目,可在include前直接修改全局C/C++编译flags:
# Pioasm是C++项目,因此修改CMAKE_CXX_FLAGS set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -DMY_CUSTOM_DEFINE=1") # 之后导入Pico-SDK include(pico_sdk_import.cmake)
方法2:仅针对PioasmBuild设置(更精准)
通过CMake的CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE变量,在PioasmBuild项目初始化时注入自定义编译选项,避免影响其他项目:
# 生成临时脚本,用于设置Pioasm的编译选项 file(WRITE "${CMAKE_BINARY_DIR}/pioasm_custom_flags.cmake" " set(CMAKE_CXX_FLAGS \"-Wall -DMY_CUSTOM_DEFINE=1\" CACHE STRING \"Pioasm编译选项\" FORCE) ") # 指定PioasmBuild项目初始化时加载该脚本 set(CMAKE_PROJECT_PioasmBuild_INCLUDE "${CMAKE_BINARY_DIR}/pioasm_custom_flags.cmake") # 导入Pico-SDK include(pico_sdk_import.cmake)
原理说明
ExternalProject_Add会启动独立的CMake进程构建子项目,主项目的编译属性不会自动继承。上述两种方法都是通过向子项目的CMake环境传递自定义flags,让子项目编译时使用指定选项。
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

