我有两个任务,waf
它们需要以正确的顺序执行,第二个任务必须等到第一个任务完成后才能执行。
为了说明它的工作方式,我在任务内部等待,在第一个任务(t_1
)中等待4秒,在第二个任务(t_2
)中等待1秒。第二项任务首先完成。可以看到,因为我在等待后创建的文件夹带有时间戳t_2 < t_1
。
在一个问题中:我如何告诉waf,那t_2
是在t_1
成功完成之后执行的?
MWE:wscript
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 = 'echo start t_1 && python -c "import time; time.sleep(4)" && echo end t_1 && mkdir t_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
run_str = 'echo start t_2 && python -c "import time; time.sleep(1)" && echo end t_2 && mkdir t_2'
color = 'RED'
@TaskGen.feature('t_2')
@TaskGen.after('apply_link', 't_1')
def add_t_2_task(self):
self.create_task('t_2')
您必须在该任务的属性中指定必须在其之前运行的任务(在该示例中t_1
),该after
属性应“等待”另一个任务完成(在该示例中,该示例(t_2
)。其指定方式如下:after = ['t_1']
当前waf书(waf 2.0)中解释通用任务生成器的文档为§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')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句