我想在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
但是当涉及到依赖关系时,我还没弄清楚如何做到这一点。
答案 0 :(得分:1)
这就是模式/隐式规则10 Implicit Rules和4.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>