Linux Makefile中赋值运算符=,:=,?=和+= 之间的区别

来源:互联网 发布:虚拟机安装mac os 编辑:程序博客网 时间:2024/06/06 14:05

### Date: 2017/4/17

### Author: SoaringLee


(1)  := 是立即变量赋值,在定义时值已经被确定;另外一种理解: “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

(2)  = 是延时变量赋值,只有在这个变量被使用时才展开,$(VAR)就是一种被使用 ;

另外一种理解:make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。

例:

VAR_A=abcd

VAR_B=$(VAR_A)
VAR_C:=$(VAR_A)
VAR_A=cdef

此时,$(VAR_B)   为   cdef   (跟随VAR_A变化)。

$(VAR_C)   为   abcd   (不随VAR_A变化)。


(3)  ?= 是条件赋值, 比如

foo ?= $(bar)

只有当foo变量还没有被定义的时候,才会将bar的值赋给foo。


(4)  +=是添加等号后面的值。比如:

  CFLAGS+= -O2 -g


0 0