Makefile初探3-變數的賦值運算子
阿新 • • 發佈:2018-11-11
(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:
朱老師講義