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

如何让CMake忽略自定义目标的命令执行返回值?

解决CMake自定义目标中忽略命令返回值的问题

嘿,我懂你遇到的这个麻烦!在Windows 7 + TDMGCC MinGW32 + 最新版Ninja的环境下,你加的那个自定义单元测试目标,只要test1.exe执行失败返回错误码,Ninja就直接终止构建了,哪怕失败输出已经写到结果文件里了对吧?

要让CMake忽略单个命令的返回值,其实只要给每个可能失败的命令套一层Windows cmd的包装,强制让它返回0就好。具体改法如下:

把你原来的ADD_CUSTOM_TARGET改成这样:

ADD_CUSTOM_TARGET(unittest_run 
    COMMAND cmd /c "test1.exe > result.testresult || exit 0"
    COMMAND cmd /c "test2.exe >> result.testresult || exit 0"
    COMMAND type result.testresult
)

原理说明:

  • cmd /c 用来执行后面的字符串命令;
  • || exit 0 是关键:如果前面的test1.exe执行失败(返回非0错误码),就执行exit 0,让整个cmd命令的返回码变成0,这样CMake和Ninja就会认为这条命令执行成功,不会终止后续的构建流程;
  • 这样不管test1.exe成功还是失败,test2.exe都会正常执行,最后也能正常输出结果文件的内容。

如果你的环境用的是MinGW自带的bash shell(比如Git Bash),那语法要换成bash的写法:test1.exe > result.testresult || true,不过看你的描述应该是用的Windows默认cmd,所以上面的方案完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:26:11