我對「shell
」MAKE功能和「$$
」之間的差異感到困惑。在本文檔中我發現:
Shell函數接受擴展(像所有參數),並傳遞給執行子shell的一個參數。然後讀取命令的標準輸出並作爲函數的值返回。
我認爲這是正是什麼 「$$」 所做爲好,但在這個小例子:
a = $(shell find . -maxdepth 1 -type f -name "Makefile")
b = $$(find . -maxdepth 1 -type f -name "Makefile")
.PHONY: all A B
all: A B
A: $(a)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
B: $(b)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
輸出如下:
Target: A
Prereq: Makefile
Var a: ./Makefile
Var b: ./Makefile
make: *** No rule to make target '$(find)', needed by 'B'. Stop.
注在這裏它說:「沒有規則制定目標'(查找)'」,好像該參數尚未擴展。 (我也試圖讓變量簡單地擴展,「b:=$$(...)
」,但這沒有改變)。
我希望有人有這方面的知識來詳細說明,這對我來說似乎是一個微妙的差異,但可能比我目前能夠理解的要深刻得多。
謝謝你的回答,這個例子非常好。我必須承認,擴展變量對我來說一直有點神奇。 –