如何在Waf中标记规则,使构建不会因该规则的失败而停止?
离。
bld(rule="magicalcommand {SRC} {TGT}", source="somefile", target="othersuchfile")
其中magicalcommand
可能会以某种方式失败(但没错该命令失败)。
答案 0 :(得分:0)
通过将规则从字符串转换为函数并将实际执行调用包装到try / except块中来解决它:
def somefunc(task):
# set up the command string using task.inputs, task.outputs [, and task.env]
cmd = 'magicalcommand ' + task.inputs[0].abspath() + ' ' + task.outputs[0].abspath()
try:
return bld.cmd_and_log(cmd)
except Exception as e:
from waflib import Logs
Logs.info('cmd failed!')
return 0
bld(rule=somefunc, source='somefile', target='othersuchfile')
请注意,我使用的是bld.cmd_and_log
,而不是bld.exec_command
。前者实际上会抛出错误(并且假设在失败时通过stdout
提供对命令的stderr
和e
的访问),后者只是为我杀死了整个构建过程。