告诉waf在开始下一个任务之前等待任务完成

时间:2017-12-04 12:15:51

标签: python waf

我在waf中有两个任务,需要以正确的顺序执行,第二个任务必须等到第一个任务完成。

为了表明它的行为方式与我预期的方式一致,我在第一项任务(t_1 4 秒和第二项任务({{ 1}}) 1 秒。第二项任务首先完成。这可以看出,因为我在等待后创建的文件夹有时间戳t_2

在一个问题中: 我如何告诉waf,t_2 < t_1成功完成后t_2已成功?

  1. MWE: wscript

    t_1

1 个答案:

答案 0 :(得分:2)

您必须指定必须在任务的t_1属性(在该示例中为after之前运行的任务“等待“用于完成其他任务(在该示例中为t_2)。 它的指定方式如下:after = ['t_1']

可以在build order constraintswaf book部分找到相关文档。

当前waf书(waf 2.0)中解释generic task generator is §9.3的文档,特别是§9.3.4解释了任务生成器执行顺序。

完整的示例MWE看起来像这样:

from waflib import Context, Options
from waflib import Task, TaskGen
from waflib.Tools.compiler_c import c_compiler

def options(opt):
    opt.load('compiler_c')

def configure(cnf):
    cnf.load('compiler_c')

def build(bld):
    bld.program(features=['t_1', 't_2'], source='main.c', target='abc')

class t_1(Task.Task):
    always_run = True
    run_str = 'date && echo 1 && echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_1 && date && echo 1'
    color = 'RED'


@TaskGen.feature('t_1')
@TaskGen.after('apply_link')
@TaskGen.before('t_2')
def add_t_1_task(self):
    self.create_task('t_1')


class t_2(Task.Task):
    always_run = True
    after = ['t_1'] # <---------------------------- **The problems solution**
    run_str = 'date && echo 1 && echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2 && date && echo 2'
    color = 'RED'


@TaskGen.feature('t_2')
@TaskGen.after('apply_link', 't_1')
def add_t_2_task(self):
    self.create_task('t_2')