【问题标题】:CMake ignore return on custom targetCMake忽略自定义目标的返回
【发布时间】:2018-08-23 01:04:23
【问题描述】:

我已将此自定义目标添加到我的 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 它应该忽略返回错误?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    您可以尝试使用条件 OR 语句,只有在前面的语句失败时才会运行,并从辅助语句生成成功的返回码

    从“条件执行”的this page 开始,如果第一个语句失败,您可以使用|| 有条件地执行辅助语句

    仅当 command1 失败时才执行 command2 (OR)

        command1 || command2
    

    从this SO answer 可以使用(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
    )
    

    【讨论】:

      【解决方案2】:

      它只能这样工作:

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

      【讨论】:

      • 正确的语法使用 && 而不是 &
      • @dyomas,mgiaco 不太可能认为通过在后台运行它们可以运行所有三个...我不太确定结果是 OP 想要的,当然...但它也可以像这样被资助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      相关资源
      最近更新 更多