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