在Makefile中常常看見這幾個賦值運算符(「=」,「:=」,「?=」,「+=」).net
新建一個Makefile,內容以下:get
ifdef aaclass
var="hello world"變量
endiffile
ifeq ($(bb),define)db
var ?= "hello world 1"di
endifmake
ifeq ($(bb),define1)運算符
var +="bb"referer
endif
ifeq ($(bb),define2)
var := "hello world is over"
endif
all:
@echo $(var)
輸入一下命令:
make aa=true bb=define 輸出:hello world
make aa=true bb=define1 輸出:hello worldbb
make aa=true bb=define2 輸出:hello world is over
make aa=bb=define 輸出:hello world 1
make aa=bb=define1 輸出:bb
make aa=bb=define2 輸出:hello world is over
從輸出能夠看到他們的區別
"=" :是最基本的賦值運算
":=":是覆蓋以前的值
"?=":是若是沒有被賦值過的就賦予等號後面的值
"+=":是添加等號後面的值
注:
make會將整個Makefile展開,再決定變量的值。也是說,變量的值將會是整個Makefile最後被指定的值。
「=」的例子1:
x=foo
y=$(x)bar
x=xyz
在上面例子中y的值將是xyzbar,而不是foobar。
「:=」的例子2:
「:=」表示變量的值決定於它在Makefile中的位置,而不是整個Makefile展開後的最終值。
x:=foo
y:=$(x)bar
x:=xyz
在例子中,y的值將會輸出foobar,而不是xyzbar了。