如何从另一个调用不同任务类的任务中启动任务。
@feature('unites')
@after_method('apply_link')
def make_test_unites(self):
if getattr(self, 'link_task', None):
tsk = self.create_task('unites', self.link_task.outputs)
tsk.a = []
@feature('gtester')
@after_method('apply_link')
def make_test_gtester(self):
if getattr(self, 'link_task', None):
tsk = self.create_task('gtester', self.link_task.outputs)
class unites (Task.Task):
def runnable_status(self):
### print("Never reached!")
...
def run(self):
...
### print("Never reached!")
...
class gtester (Task.Task):
def runnable_status(self):
//works as expected
def run(self):
...
bld = self.generator.bld
...
#utask = unites(env=bld.env)
utask = self.generator.create_task ('unites')
assert (utask)
utask.set_inputs(self.generator.link_task.outputs)
utask.a = ["some foo extra stuff"]
#bld.add_to_group (utask)
### print ("this is definitily reached")
所以代码不会崩溃,但是当我使用./waf --zones=task_gen,tasks
时,我得到的只是gtester
的一项任务,但unites
没有。
这就是它在实践中的使用方式:
test = bld.program(
features = ['c', 'glib2', 'gtester'],
...,
...
)
深入研究了the waf book和API文档,但两者都没有产生任何有用的信息。
那么如何从已经运行的任务中安排任务(或任意数量的任务)?
答案 0 :(得分:2)
解决方案是使用
tsk = self.generator.create_task('unites')
bld.producer.outstanding.insert(0, tsk)
bld.producer.total += 1
./waf --zones=tasks
显示其他任务。
受./waf/playground/dynamic_headers/wscript
值得一提的是:处理[M/N]
时,每行前面的gtester
任务计数会突然跳升,这是因为总计数在结束时更新了Task
所以waf在那之前无法知道总数。