GNU Makefile使用单个配方执行从多个先决条件生成多个目标

时间:2016-08-23 19:15:00

标签: makefile gnu-make

我有一个工具foo,可以接收一个或多个输入并生成相应的输出。例如,foo a.in生成a.outfoo a.in b.in生成a.outb.outa.out仅取决于a.in,而b.out仅取决于b.in

虽然该工具可以在单个输入上运行,但使用多个输入运行效率更高,因此我可以使用规则

%.out: %.in
    foo $?

单独生成每个out文件,我想将它们分批调用foo

使用模式规则,我可以使用一次执行配方生成多个目标:

a%out b%out: a%in b%in
    foo $?

但是,a.out现在不必要地取决于b.inb.out现在不必要地取决于a.in

stamp: a.in b.in a.out b.out
    cat 

当先决条件和目标之间只有一对一的依赖关系时,如何使用单个配方执行从多个输入生成多个目标?

1 个答案:

答案 0 :(得分:0)

.INTERMEDIATE暂存文件和时间戳文件可以执行此操作

.INTERMEDIATE: list

stamp: list
    foo `cat list`
    touch stamp

list: a.out b.out a.in b.in
    @:

%out: %in
    echo $? >> list