【问题标题】:How to set a command as a dependency in waf如何在 waf 中将命令设置为依赖项
【发布时间】:2017-06-08 01:29:25
【问题描述】:

我有一个不创建文件的 waf 规则,所以我没有目标。我希望在第一条规则之后严格运行另一条 waf 规则。下面是这种情况的一个人为示例。

在 Make 语法中,我正在尝试执行以下操作:

kill_server:
     myserver --kill

install_server: kill_server
     cp $(SRC)/myserver $(BLD)/myserver

在waf,我在这里:

 def install_server(bld):
      killer = bld(name='kill_server', rule='myserver --kill')
      bld(name='install_server', rule='cp ${SRC} ${TGT}', 
          source=os.path.join(src, 'myserver'), 
          target=os.path.join(bld, 'myserver'), deps=[killer])

显然这不起作用,因为killer 是TaskGen,而不是目标节点。我可以在部门中添加什么?一个步骤可以依赖于另一个不创建目标的步骤吗?

【问题讨论】:

    标签: waf


    【解决方案1】:

    对于基于规则的任务生成器,您可以使用after 关键字:

    def build(bld):
    
        bld(
            name = 'kill_server',
            rule = 'echo killing ...;sleep 5',
        )
    
        bld(
            name = 'install_server',
            rule = 'cp ${SRC} ${TGT}', 
            source = 'myserver', 
            target = 'myserver2',
            after = ["kill_server"]
        )
    

    它作为基于规则的 TG 仅生成一个具有 TG 名称的任务,并且该任务使用 after 关键字。

    其他 TG 的另一种解决方案是生成一个输出文件并将其用作依赖 TG 的源。

    如果源和目标相同,则使用 waf Node API:

    server = bld.path.find_node('myserver')
    target_server = server.get_bld()
    

    waf 自动管理源代码树与构建树。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 2019-09-07
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多