Makefile中的“=”号是变量赋值,另外三个是它的拓展应用,具体区别去下:
1.“=”
简单的变量赋值,比如:
objects = program.o foo.o utils.o
简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:
echo $(foo)
执行“make all”将会打出变量$ (foo)的值是“Huh?”($ (foo)的值是$ (bar),$ (bar)的值是$ (ugh),$ (ugh)的值是“Huh?”)可见,变量是可以使用后面的变量来定义的
2.“:=”
与“=”的区别:前面的变量不能使用后面的变量,只能使用前面已定义好了的变量
3.“?=”
如果变量没被定义过,则定义变量,否则则什么都不做,比如:
FOO ?= bar
等价于
ifeq ($(origin FOO), undefined)
FOO = bar
endif
4.“+=”
追加变量的值,比如:
objects = main.o foo.o bar.o utils.o
objects += another.o
$(objects)值变成:“main.o foo.o bar.o utils.o another.o”(another.o被追加进去了)