makefile中的makefile變量與shell變量的區別

在linux的Makefile中,經常會見到$var和$$var的形式。下面就這兩種表示方法的區別進行簡單的概述。
在Makefile中的規則命令行中:
$var:將Makefile中的變量var的值,傳給shell命令。
$$var:訪問shell命令中定義的變量var。
經典示例代碼如下所示:
var=3                       # a
target:
       echo $(var)          # b
       var=4                # c
       echo $(var)          # d
       echo $$var           # e
a:定義Makefile中的變量var,值爲3
b:打印Makefile中的變量,值爲3
c:定義shell命令中的變量var,值爲4,Makefile的變量var不受影響
d:打印Makefile中的變量,值爲3
e:打印shell命令中的變量。此時var爲未定義的變量。

讀者可能會奇怪,shell命令中的var明明已經定義了,爲什麼是未定義呢?
原因:在Makefile的規則命令,如果相互之間沒有使用';\'連接起來的話,相互之間是不能共享變量的。
修改示例代碼,使用';\'連接shell規則命令行。
var=3                         # a
target:
       echo $(var);\          # b
       var=4;\                # c
       echo $(var);\          # d makefile先要進行擴展,擴展的結果就是echo 3
       echo $$var             # e  makefile將$$VAR先執行一次擴展得到echo $var然後交給shell去解釋執行
此時,b、d、e行的輸出結果分別爲3、3、4,符合用戶的預期。

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