是否有规范的方法来缓存运行中的扩展makefile变量?

时间:2012-06-19 19:26:42

标签: makefile gnu-make

在我的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中本地缓存和失效?

1 个答案:

答案 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文章。

UPD。

output_1.d文件应包含以下内容:

output_1 : dep_1 ... dep_N

dep_1 ... dep_N :

如果某些output_1文件比目标更新,则第一行指示Make重建dep_X。如果删除其中一个先决条件,第二行将避免Make失败并显示错误。