Makefile中$$的使用


在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
       echo $$var             # e
此時,b、d、e行的輸出結果分別為3、3、4,符合用戶的預期。

另外,在Makefile中,$$還被用來做二次擴展,即SECONDEXPANSION。
使用時,必須在最前面加上一行:
.SECONDEXPANSION    # 使用二次擴展必須添加此行
關於二次擴展,看了好幾個博客,還是未能深刻理解,有待后續研究。
請各位看官,不吝賜教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM