使用make进行多个索引作业

时间:2014-12-11 17:31:31

标签: makefile

我想在makefile中执行多个作业,所有作业都有类似的模式:

all: job1 job2 job3 ... job21

job1: begin.x mid1.x end.x
    cat $^ > $@

job2: begin.x mid2.x end.x
    cat $^ > $@

...
job21: begin.x mid21.x end.x
    cat $^ > $@

mid1.x:
    echo "file 1" > $@
...
mid21.x:
    echo "file 21" > $@

有没有办法可以使用数组作为索引来定义作业及其依赖项。

在没有依赖关系的情况下,我可以做类似的事情:

n = 1 2 3 4 ... 21

all: $(n)

$(n):
    echo "file $@" > mid$@.x

但是当涉及到依赖关系时,我还没弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

这就是模式/隐式规则10 Implicit Rules4.12 Static Pattern Rules的用途。

使用隐式规则:

all: job1 job2 job3 ... job21

job%: begin.x mid%.x end.x
        cat $^ > $@

mid%.x:
        echo 'file $*' > $@

使用静态模式规则:

n = 1 2 3 ... 21
JOBS := $(addprefix job,$n)
MIDS := $(patsubst %,mid%.x,$n)

all: $(JOBS)

$(JOBS) : job% : begin.x mid%.x end.x
        cat $^ > $@

$(MIDS) : mid%.x :
        echo 'file $*' > $@

对于静态模式版本,如果希望make能够以模式/隐式版本的方式自动清理mid*.x文件,则还需要将.INTERMEDIATE: $(MIDS)添加到makefile中。 / p>