首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在其他waf任务中使用waf任务的输出

在其他waf任务中使用waf任务的输出
EN

Stack Overflow用户
提问于 2017-12-04 10:10:58
回答 1查看 440关注 0票数 2

我希望在另一个waf任务中使用waf任务的目标作为,但这不像预期的那样工作。

一个简单但完整的例子:我添加了两个任务(t_1t_2)作为一个特性,并通过beforeafter添加了它们的约束。

  • 在Task t_1中,我使用src=link_task.outputs[0]作为任务的src,使用link_task.outputs[0].change_ext('.txt')作为任务的tgt
  • 但是在t_2中,我想使用t_1的输出/目标作为输入。我以为我可以通过引用self.t_1.ouputs来获得它,但这似乎是错误的。为什么这在t_1中适用于apply_link任务,而不适用于t_1
  1. MWE:wscript 从晶片库导入上下文中,来自TaskGen导入任务的选项,来自waflib.Tools.compiler_c导入c_compiler def Options (Opt)的选项: opt.load('compiler_c') def配置(Cnf):cnf.load('compiler_c') def构建(Bld):bld.program(特性=‘t_1’,'t_2',source='main.c',target="abc")类t_1(Task.Task):always_run = True run_str = 'echo ${SRC} && echo hello t_1 > ${TGT}‘颜色=’红色‘@TaskGen.feature('t_1') @TaskGen.after('apply_link') @TaskGen.before('t_2') def add_t_1_task(self):尝试: link_task = self.link_task,除了AttributeError作为错误:打印错误返回self.create_task('t_1',src=link_task.outputs,tgt=link_task.outputs.change_ext(‘.txt’)类t_2(Task.Task):always_run = True run_str = 'echo ${SRC}‘颜色= 'RED’@TaskGen.feature('t_2') @TaskGen.after('apply_link‘),' t_1 ') def add_t_2_task(self):t_1= self.t_1,除了AttributeError作为错误:打印错误返回self.create_task('t_2',src=t_1.outputs)
  2. 运行python waf configure build将导致: user@膝上型计算机/cygdrive/c/work $pythonWAF-1.9.13将干净生成设置设置顶部配置为: /cygdrive/c/work : /cygdrive/c/work/build检查“gcc”(C编译器):/usr/bin/gcc成功完成(0.150秒)“清洁”成功完成(0.010 s) Waf:输入目录/cygdrive/c/work/build' 'task\_gen' object has no attribute 't\_1' <===================== How to get this working [1/3] Compiling main.c [2/3] Linking build/abc.exe [3/3] Compiling build/abc.exe abc.exe Waf: Leaving directory/cygdrive/c/work/build‘build’已成功完成(0.270)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-08 18:06:35

beforeafter装饰器应用于任务生成器方法,而不是任务。你应该:

代码语言:javascript
运行
复制
@TaskGen.feature('t_1')
@TaskGen.after('apply_link')
# correction: no need to use @TaskGen.before('add_t_2_task')
def add_t_1_task(self):

    # correction: you have to define self.t_1

    self.t_1 = self.create_task(
        't_1',
        self.link_task.outputs[0], 
        self.link_task.outputs[0].change_ext('.txt')
    )

@TaskGen.feature('t_2')
@TaskGen.after('apply_link', 'add_t_1_task') # correction: use method name
def add_t_2_task(self):

    # add_t-2_task is executed after add_t_1_task, so using self.t_1 is ok

    print "t_1", self.t_1

顺便说一句,不要使用always_run=True,因为它击败了waf的一个主要特性,即只构建您需要构建的内容:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47630926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档