1. 程式人生 > >makefile詳解 變數

makefile詳解 變數

定義變數

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的定義方式
如果是a:=,在立即
否則延後

define a
b …
endef

立即

延後

a : b
    c …

立即

立即
(命令中的變數,即變數c是延後展開)