使配方执行两次

Mar*_*tus 5 makefile

有一种方法可以多次执行配方吗?在下面的SSCCE中,该配方仅执行一次:

$ cat Makefile 
.PHONY: a b
a: b b 
b:
    echo "beta"
$ make 
echo "beta"
beta
Run Code Online (Sandbox Code Playgroud)

Dig*_*uma 8

阅读并理解注释;-)之后,我可以想到两种方法来运行两次配方:

@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因素更大有可能并发调用。