1
有没有办法多次执行配方? 在它下面的SSCCE看来,配方只执行一次:使配方执行两次
$ cat Makefile
.PHONY: a b
a: b b
b:
echo "beta"
$ make
echo "beta"
beta
有没有办法多次执行配方? 在它下面的SSCCE看来,配方只执行一次:使配方执行两次
$ cat Makefile
.PHONY: a b
a: b b
b:
echo "beta"
$ make
echo "beta"
beta
一旦你已经阅读并理解了意见;-),有两种方法我能想到的运行配方两次:
@OliCharlesworth提到的第一个 - 用一个循环你的食谱中:
.PHONY: a b
a: b b
b:
for i in 1 2; do \
echo "beta" ;\
done
注意你需要在配方中嵌入多行shell表达式时相当谨慎。除非用反斜杠结束行,否则make会将每行视为单独的shell调用,这对于循环不起作用。
另一种方式是复制你的b目标,使两个副本具有相同的配方:
.PHONY: a b1 b2
a: b1 b2
b1 b2:
echo "beta"
这个定义具有相同配方的b1
和b2
目标。然后a
取决于b1
和b2
,所以配方被调用两次。请注意,无法保证调用b1
和b2
的顺序 - 如果您的-j因子大于1,它们可能会同时调用。
配方用于构建依赖关系。一个只需要建立一次依赖关系(因此不重视副本)。如果你想做两件事,在你的食谱里放一个循环*。 – 2014-09-03 22:37:45
@OliCharlesworth这是一个SSCCE,有理由希望同一个配方被执行两次,不一定是连续执行。例如:'test:drop-db create-db load-data dump -data drop -db create-db restore-data' – 2014-09-03 22:49:23
@MarcusJuniusBrutus:你的例子是无稽之谈 - 依赖关系是依赖关系,它们没有顺序。如果你想让食谱按顺序执行,你可以在你的动作中按顺序执行它们。 – 2014-09-03 22:56:21