You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake自定义命令中跨平台生成非配置类文件

实现方案

你可以通过调用CMake自身能力实现完全跨平台的构建阶段文件生成,不需要依赖任何平台特定命令,两种常用方案如下:

方案1:全平台兼容所有CMake版本(推荐)

利用CMake的脚本执行模式-P运行file(WRITE)指令,适配所有CMake 3.x版本,无任何平台依赖:

# 配置阶段先生成执行写入操作的临时CMake脚本,内容完全由CMake控制,无转义问题
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/write_generated_c.cmake
  "file(WRITE \"generated.c\" \"int main() { return 0; }\")"
)

add_custom_command(
  OUTPUT generated.c
  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/write_generated_c.cmake
  # 可根据实际需求调整依赖项,此处默认监听当前CMakeLists.txt修改
  MAIN_DEPENDENCY ${CMAKE_CURRENT_LIST_FILE}
  COMMENT "Generating generated.c"
)

如果需要生成的内容包含多行、特殊字符,你可以提前把内容存入CMake变量,再替换到file(WRITE)的参数中即可,CMake会自动处理转义逻辑。

方案2:CMake 3.18+ 简化写法

CMake 3.18版本开始为cmake -E新增了write子命令,可以直接调用,写法更简洁:

add_custom_command(
  OUTPUT generated.c
  COMMAND ${CMAKE_COMMAND} -E write generated.c "int main() { return 0; }"
  MAIN_DEPENDENCY ${CMAKE_CURRENT_LIST_FILE}
  COMMENT "Generating generated.c"
)

两种方案都使用${CMAKE_COMMAND}调用CMake自身可执行文件,不会依赖任何平台特定的shell命令,完全满足跨平台要求。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:54:06