使食谱执行两次

时间:2014-09-03 22:35:23

标签: makefile

有没有办法不止一次执行食谱? 在下面的SSCCE中,似乎配方只执行一次:

$ cat Makefile 
.PHONY: a b
a: b b 
b:
    echo "beta"
$ make 
echo "beta"
beta

1 个答案:

答案 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"

这定义了具有相同配方的b1b2目标。然后a取决于b1b2,因此配方会被调用两次。请注意,无法保证调用b1b2的顺序 - 如果您的-j因子大于1,则可能会同时调用它们。