Makefile之“=”、":="、“+=”、“?=”

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

  

原文地址:https://www.cnblogs.com/weiyouqing/p/8660635.html