我有一个不创建文件的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?一个步骤可以依赖于另一个不创建目标的步骤吗?
答案 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自动管理源树与构建树。