makefile詳解 變數
阿新 • • 發佈:2019-01-26
定義變數
makefile的變數定義有三種方式
1. 立即賦值 a:=b
2. 延遲賦值 a=b
3. 條件賦值 a?=b
4. 附加賦值 a+=b
它們之間的區別是,
第一種方式,會立即計算b的值,並賦值給a;
第二種方式,相當於C++和java的引用。如果後面b的值改變了,那麼a的值也會改變;
第三種方式,如果a沒有定義,則相當於a=b ,否則不執行任何操作;
第四種方式,將b的值新增到a原有的值後面,再賦值給a。
獲取變數值
$(var) //表示取變數var的值,記得當變數名多於一個字元時,使用”()”.
定義巨集
define function
xxx // 具體的內容
endef
需要指出的是,雖然形式上類似函式,但是實際內容只是字串替換,這與C中的巨集函式是一樣的。
什麼時候計算變數
makefile的解析分為兩個階段,第一階段生成規則和依賴關係,第二階段執行規則;
只有立即展開的變數會在第一階段計算,而延後展開的變數會在第二階段計算。
立即與延後展開的規則 |
||
表示式 |
何時擴充套件a |
何時擴充套件b |
a=b |
立即 |
延後 |
a?=b |
立即 |
延後 |
a:=b |
立即 |
立即 |
a+=b |
立即 |
取決於之間a的定義方式 |
define a |
立即 |
延後 |
a : b |
立即 |
立即 |