1

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

4

1 回答 1

1

您可以使用与 GCC 的依赖项自动生成相同的方法。

output_1: $(src)/script_1.pl $(input_1)
    $< $(input_1) > $@
    @perl $(src)/local_deps.pl $< $(<D) > $@.d

-include output_1.d

另请参阅:高级自动依赖生成文章。

UPD。

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

output_1 : dep_1 ... dep_N

dep_1 ... dep_N :

第一行指示 Make 重建output_1如果某些dep_X文件比目标文件更新。第二行可避免 Make 在您删除其中一个先决条件时因错误而失败。

于 2012-06-19T21:03:35.047 回答