这类变量可以通过"="或"define"定义。递归变量被用的时候再去扩展。
student = lilei
CLASS = $(student)$(teacher)
teacher = young
all:
@echo $(CLASS)
输出:lilei young
递归方式拓展的变量在定义时可以引用之前没有定义的变量(可能后续定义或makefile命令行传递的变量)。但是,要注意因为出现变量的递归而出现无限的变量展开的过程。如下:
X = $(Y)
Y = $(Z)
Z = $(X)
这样的话,会陷入无限变量展开,因为最终引用的自己。
1.3.3 直接展开式变量
直接展开式变量通过“:=“定义。变量值中其他变量或函数引用在定义变量时展开。
X := student
Y := $(X)
X := teacher
all:
@echo $(X) $(Y)
输出结果为:teacher student
直接展开式变量在定义时就完成了对所引用变量和函数的展开,因此不能实现对其后续定义的引用。
1.3.4 条件赋值
“?="来进行条件赋值,只有此变量在之前没有赋值的情况下才会对变量进行赋值。
X := student
X ?= teacher
Y ?= student
all:
@echo $(X) $(Y)
输出 student student