Makefile中的"="":="、"?="和"+="
区别是:
"="是直接给变量赋值。
":="是将":="右边中包含的变量直接展开给左边的变量赋值。
"?="是在该变量没有被赋值 的情况下为其赋值。
"+="是给该变量追加值。
例:
a = 1
b = 2
c := $(a) 3
d = 4
d ?= 5
b += 6
结果:
a=1
c=1 3
d=4
b=2 6
"="是直接给变量赋值。
":="是将":="右边中包含的变量直接展开给左边的变量赋值。
"?="是在该变量没有被赋值 的情况下为其赋值。
"+="是给该变量追加值。
例:
a = 1
b = 2
c := $(a) 3
d = 4
d ?= 5
b += 6
结果:
a=1
c=1 3
d=4
b=2 6
#example a = orginal_value
b = $(a)
a = later_value
all: @echo $(b)
运行make#make
later_value#example
a = orginal_valueb := $(a)
a = later_value
all: @echo $(b)
#make
original_value区别显而易见, := 定义的变量如果值内容本身就是变量,他不会延伸。如果是=,会延伸。所以在使用时,不需要延伸的时候一定要加上: ,防止不可控的情况。