1. 程式人生 > >Makefile初探3-變數的賦值運算子

Makefile初探3-變數的賦值運算子

(1) = 最簡單的賦值

用=賦值的變數,在被解析時他的值取決於最後一次賦值時的值,所以你看變數引用的值時不能只往前面看,還要往後面看。

注意:Makefile中並不要求賦值運算子兩邊一定要有空格或者無空格,這一點比shell的格式要求要鬆一些。

  1 A=abc
  2 B=$(A)def
  3 A=gh
  4 
  5 all:
  6     echo $B

輸出:

[email protected]:~/liyijun$ make all
echo ghdef
ghdef

(2) := 一般也是賦值

用:=來賦值的,則是就地直接解析,只用往前看即可。

  1 A=abc
  2 B:=$(A)def
  3 A=gh
  4 
  5 all:
  6     echo $B

輸出:

[email protected]:~/liyijun$ make all
echo abcdef
abcdef

解析誰就看誰是:=  或者是=     雖然是A是=,但是B是:=,所以就按照:=執行

(3)?=

如果變數沒有賦值過(前後都要看)則執行這條賦值,如果前面已經賦值過了則本行被忽略。(實驗可以看出:所謂的沒有賦值過其實就是這個變數沒有被定義過)

例項1:

  1 var=abcd
  2 var?=ef
  3 
  4 all:
  5     echo $(var)

輸出:

abcd

 例項2:

  1 
  2 var?=ef
  3 var=abcd
  4 all:
  5     echo $(var)

輸出:

abcd

 例項3:

  2 var?=ef
  3 var=
  4 all:
  5     echo $(var)

輸出為空,說明空值也算是賦值了

(4)+=  

用來給一個已經賦值的變數接續賦值,意思就是把這次的值加到原來的值的後面,有點類似於strcat。(在shell makefile等檔案中,可以認為所有變數都是字串,+=就相當於給字串stcat接續內容)(注意一個細節,+=續接的內容和原來的內容之間會自動加一個空格

隔開)

例項:

  1 var=ab
  2 var+=cd
  3 all:
  4     echo $(var)
  5 var+=ef

輸出:

ab cd ef

 

 

REF:

朱老師講義