【发布时间】:2023-04-20 21:04:01
【问题描述】:
考虑以下自定义命令(最新的 CMake + ninja):
add_custom_command(
OUTPUT
${OUTPUT}
COMMAND
${Python3_EXECUTABLE} script.py ${INPUT} > ${OUTPUT}
DEPENDS
${INPUT}
VERBATIM
COMMAND_EXPAND_LISTS
)
当script.py 运行没有错误时,它工作正常。
但是,当 script.py 因错误而失败时,仍会创建 ${OUTPUT}。
因此,当前构建按预期失败,但下一个构建看到 ${OUTPUT} 比 ${INPUT} 更新,并且不会尝试再次运行自定义命令。
我希望构建系统在命令失败时自动删除${OUTPUT},以防止这种情况发生,但显然这不会发生。
- 有没有办法在自定义命令“失败”时执行操作?
如果有,我可以删除那里的${OUTPUT}。 - 或者,除非命令成功,否则防止创建输出的最简单方法是什么?
我天真地尝试过类似的事情:
${Python3_EXECUTABLE} script.py ${INPUT} > ${OUTPUT} || rm -f ${OUTPUT}
但这不起作用,因为命令结果代码实际上是 rm 结果代码而不是 Python 的结果代码,因此自定义命令不会像在后续构建中那样失败。
【问题讨论】:
标签: cmake ninja build-system cmake-custom-command