有一种方法可以多次执行配方吗?在下面的SSCCE中,该配方仅执行一次:
$ cat Makefile
.PHONY: a b
a: b b
b:
echo "beta"
$ make
echo "beta"
beta
Run Code Online (Sandbox Code Playgroud)
阅读并理解注释;-)之后,我可以想到两种方法来运行两次配方:
@OliCharlesworth提到了第一个-在食谱中使用循环:
.PHONY: a b
a: b b
b:
for i in 1 2; do \
echo "beta" ;\
done
Run Code Online (Sandbox Code Playgroud)
请注意,在配方中嵌入多行shell表达式时需要非常小心。除非您用反斜杠终止行,否则make会将每行视为单独的shell调用,这对于循环无效。
另一种方法是复制b目标,以使两个副本具有相同的配方:
.PHONY: a b1 b2
a: b1 b2
b1 b2:
echo "beta"
Run Code Online (Sandbox Code Playgroud)
这会使用相同的配方定义b1和b2目标。然后a取决于b1和b2,因此配方被调用两次。需要注意的是,没有在该命令的保证b1和b2将被调用-他们会,如果你有超过1 -j因素更大有可能并发调用。