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