有没有办法不止一次执行食谱? 在下面的SSCCE中,似乎配方只执行一次:
$ cat Makefile
.PHONY: a b
a: b b
b:
echo "beta"
$ make
echo "beta"
beta
答案 0 :(得分:5)
一旦您阅读并理解了评论;-),我有两种方法可以考虑两次运行食谱:
@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,则可能会同时调用它们。