如何将命令设置为waf中的依赖项

时间:2017-06-07 06:55:30

标签: waf

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

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

public static void main(String[] args) throws Exception {
    long test = ConvertStringToDate("May 26 10:41:23", "MMM dd hh:mm:ss");
    long test2 = ConvertStringToDate("Tue, Jun 06 2017, 12:30 AM", "EEE, MMM dd yyyy, hh:mm a");
    long test3 = ConvertStringToDate("Jun 13 2003 23:11:52.454 UTC", "MMM dd yyyy HH:mm:ss.SSS zzz");
}

private static long ConvertStringToDate(String dateString, String format) {
    try {
        return new SimpleDateFormat(format).parse(dateString).getTime();
    } catch (ParseException e) {}
    return 0;
}

在waf,我在这里:

kill_server:
     myserver --kill

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

显然这不起作用,因为 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]) 是TaskGen,而不是目标节点。什么可以我放入deps?一个步骤可以依赖于另一个不创建目标的步骤吗?

1 个答案:

答案 0 :(得分: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自动管理源树与构建树。