CMake忽略自定义目标的返回值

3

我已经将这个自定义目标添加到了我的CMakeList.txt文件中。

系统环境:Windows 7,TDMGCC MinGW32,以及来自GitHub的最新Ninja。

ADD_CUSTOM_TARGET(unittest_run
    COMMAND test1.exe > result.testresult
    COMMAND test2.exe >> result.testresult
    COMMAND type result.testresult
)

问题在于当 test1.exe 失败时,我会生成一个失败的输出,但似乎还有一些错误代码导致问题。 ninja:build stopped:subcommand failed。 我该如何告诉 CMake 忽略返回错误?
2个回答

4
你可以尝试使用条件或语句,仅在前面的语句失败时运行,并从次要语句中生成成功的返回代码。
从“条件执行”的此页面中,您可以使用||来有条件地执行第二个语句,如果第一个语句失败。

Execute command2 only if command1 fails (OR)

    command1 || command2

这篇SO答案中,我们可以使用(exit 0)生成成功的返回码。

true大致相当于(exit 0)(括号创建一个退出状态为0的子shell,而不是退出当前的shell)。

把所有东西都放在一起:

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

0

它只能这样工作:

COMMAND 
test1.exe > result.testresult & 
test2.exe >> result.testresult || 
(exit 0) &
type result.testresult

正确的语法使用 && 而不是 _&_。 - dyomas
@dyomas,mgiaco 可能认为通过在后台运行这些程序,您可以同时运行所有三个程序... 当然,我不确定结果是否符合 OP 的要求... 但是也可以像这样找到它。 - Alexis Wilke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接