我先来总结一下:
① 如果y = $(x),那么取x最后一次被赋值的值(不管最后赋值方式是”:=”还是”=”)
② 如果y := $(x),那么取x上一次被赋值的值(不管最后赋值方式是”:=”还是”=”)
下面用八个例子来证明:
官方的定义太官方了,大家可以直接举例证明容易理解。
①:
x = czg
y = $(x)
x = xyz
all:
@echo y = $(y)
结果: y = xyz
②:
x := czg
y = $(x)
x = xyz
all:
@echo y = $(y)
结果: y = xyz
③:
x = czg
y = $(x)
x := xyz
all:
@echo y = $(y)
结果: y = xyz
④:
x := czg
y = $(x)
x := xyz
all:
@echo y = $(y)
结果: y = xyz
⑤:
x = czg
y := $(x)
x = xyz
all:
@echo y = $(y)
结果: y = czg
⑥:
x := czg
y := $(x)
x = xyz
all:
@echo y = $(y)
结果: y = czg
⑦:
x = czg
y := $(x)
x := xyz
all:
@echo y = $(y)
结果: y = czg
⑧:
x := czg
y := $(x)
x := xyz
all:
@echo y = $(y)
结果: y = czg
官方定义:
变量的定义语法形式如下:
immediate = deferred
immediate ?= deferred
immediate := immediate
immediate += deferred or immediate
define immediate
deferred
endef