= 递归展开,变量会原封不动的存储字符序列,知道被引用的时候再展开。
:= 简单展开,在变量赋值的时候就展开,后续修改对它赋值时引用的变量不影响它的值。
?= 如果变量原先没有赋值,则递归展开,否则不变。 这个应该比较常出现在判断变量是否已经在环境变量中被定义的情况。
:= 简单展开,在变量赋值的时候就展开,后续修改对它赋值时引用的变量不影响它的值。
?= 如果变量原先没有赋值,则递归展开,否则不变。 这个应该比较常出现在判断变量是否已经在环境变量中被定义的情况。
如下Makefile
STR = "INIT"
STR2 = "INIT"
STR3 = "INIT"
NAME = "First"
STR = $(NAME)
STR2 := $(NAME)
STR3 ?= $(NAME)
STR4 ?= $(NAME)
NAME = "Second"
ALL:
@echo $(STR)
@echo $(STR2)
@echo $(STR3)
@echo $(STR4)
Make的输出结果是:
Second
First
INIT
Second