在我的makefile的开头,我正在为每个执行的perl脚本创建一个依赖列表,如下所示:
deps_script_1 := $(shell perl $(src)/local_deps.pl $(src)/script_1.pl $(src))
deps_script_2 := $(shell perl $(src)/local_deps.pl $(src)/script_2.pl $(src))
...
deps_script_N := $(shell perl $(src)/local_deps.pl $(src)/script_N.pl $(src))
稍后会使用这些变量:
output_1: $(src)/script_1.pl $(input_1) $(deps_script_1)
$< $(input_1) > $@
我已经将local_deps.pl的每次调用从5秒减少到<1秒,但随着脚本列表的增长,它仍然很乏味。
我可以教local_deps.pl来缓存依赖项列表以及何时无效,但这涉及更多shell。仅供参考,当$(src)/ lib / perl上的修改时间比相应的输出文件更新时,会发生无效。
有没有办法在我的makefile中本地缓存和失效?
答案 0 :(得分:1)
您可以使用与GCC依赖项自动生成相同的方法。
output_1: $(src)/script_1.pl $(input_1)
$< $(input_1) > $@
@perl $(src)/local_deps.pl $< $(<D) > $@.d
-include output_1.d
另请参阅:Advanced Auto-Dependency Generation文章。
output_1.d
文件应包含以下内容:
output_1 : dep_1 ... dep_N
dep_1 ... dep_N :
如果某些output_1
文件比目标更新,则第一行指示Make重建dep_X
。如果删除其中一个先决条件,第二行将避免Make失败并显示错误。