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

CMake中如何无论构建是否失败都能执行后置构建脚本

CMake 构建全阶段结束后始终执行脚本的实现方案

方案1:原生CMake配置(无需修改构建命令)

  • 在CMakeLists.txt中添加始终构建的自定义目标:
add_custom_target(
    GenerateBuildReport ALL
    COMMAND python.exe genReport.py
    COMMENT "Generating build error and warning report"
    VERBATIM
)
# 配置该目标无需依赖任何其他产物,每次构建都会执行
set_target_properties(GenerateBuildReport PROPERTIES ALWAYS_BUILD ON)
  • 执行构建时给make添加-k参数,让构建器遇到错误时继续执行完所有可运行的目标:
make all -k

该配置下,即使前面的源文件编译、静态库生成、可执行文件链接步骤失败,GenerateBuildReport目标因为没有依赖会被正常执行。

方案2:包装构建命令(无需修改CMake配置)

直接在执行构建的命令行中添加逻辑,无论make执行结果是否成功,都后续执行报告生成脚本:

  • Linux/macOS shell写法:
make all; python.exe genReport.py
  • Windows cmd写法:
make all & python.exe genReport.py
  • Windows PowerShell写法:
make all; python.exe genReport.py

该方案不需要调整CMake代码,也不需要额外添加构建参数,是最低成本的实现方式。

可选补充:统一收集全构建流程日志

如果你的报告脚本需要解析所有编译、链接阶段的告警/错误信息,可以在CMake中配置统一的日志输出:

# 将所有C++编译输出追加到统一日志文件,C语言同理修改CMAKE_C_COMPILER_LAUNCHER即可
set(CMAKE_CXX_COMPILER_LAUNCHER ${CMAKE_COMMAND} -E env CXX_LOG=${CMAKE_BINARY_DIR}/full_build.log tee -a ${CMAKE_BINARY_DIR}/full_build.log)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:04