Makefile之“=”、":="、“+=”、“?=”中几个的区别:
1.”=“符号
=表示个变量赋值;
注意:
当变量A被赋值给变量B时(B=A),这里A可以的这条指令之前定义的,也可以是这条指令之后定义的;
但:最终变量B的值取决于Makefile最后的赋值;
例如:
x = 1 y = $(x) x = 2 all: ehco $(y)
最后输出的结果是2
2.":="符号
:=也是变量赋值符号;
注意:
当变量A被赋值给变量B时(B=A),这里变量A必须是这条指令之前定义的;
例子:
B := $(A) bar
A := MY
all:
@echo $(B)
输出的结果是:bar
B = $(A) bar A = MY all: @echo $(B)
输出的结果是:MY bar
这就是“=”和“:=”的区别;
3.“+=”符号
符号意义:继续添加等号后面的值
4.“?=”符号
B ?= A
符号意义:变量B没有被定义,则执行赋值;
变量B如果在这指令之前已经被定义,则这条语句不执行;
A =3
B = 2
B ?= $(A) all: echo $B
输出的结果是2
A =3 B ?= $(A) all: echo $B
输出的结果是3