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
相关产品推荐
相关产品推荐

