允许构建目标在Waf中失败

时间:2013-10-03 08:17:33

标签: waf

如何在Waf中标记规则,使构建不会因该规则的失败而停止?

离。

bld(rule="magicalcommand {SRC} {TGT}", source="somefile", target="othersuchfile")

其中magicalcommand可能会以某种方式失败(但没错该命令失败)。

1 个答案:

答案 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提供对命令的stderre的访问),后者只是为我杀死了整个构建过程。