makefile中$(var)和$$(var)

makefile中我們經常看到$(var),表示對var的引用,它其實是讀取makefile中的變量var,然後將其擴展開,傳給shell命令。

但是不要輕易的認爲這個makefile中var就和shell中var是同一個變量了,shell中的var是一個內置變量,其值是由makefile傳遞給shell的。

而$$(var)是用來訪問shell內定義的變量(不是makefile中定義的變量)。如果某個規則是由多個shell命令構成,如果每句之間沒有用;和\連接起來的話,其實它們就是相互無關的命令。

下面舉例驗證:

#for test
var=3 

all:
	echo $(var) #1
	var=4       #2
	echo $(var) #3
	echo $$(var) #4

1:輸出3
2:一個獨立shell定義var=4,不會影響makefile中var
3:同1,輸出3
4:var在shell中爲定義,所以輸出空行

再看shell連起來的例子:

var=3 
target:
	echo $(var) ;\ #1
	var=4 ;\      #2
	echo $(var);\ #3
	echo $$(var) #4

1:輸出3
2:一個獨立shell定義var=4,不會影響makefile中var
3:輸出3,雖然shell中有var,但是makefile先將echo $var擴展成echo 3,s所以還是輸出3
4:makefile將其擴展成echo $var,shell中已有var,值爲4

總之,在makefile中當要引用shell變量的時候,都需要使用$$var

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章