首页 > 代码库 > Makefile学习之路——4
Makefile学习之路——4
变量的类别有递归扩展变量和简单扩展变量。只用一个“=”符号定义的变量被称为递归扩展变量。通过下面例子观察递归扩展变量的特点。
1 .PHONY: all
2
3 foo=$(bar)
4 bar=$(ugh)
5 ugh=Huh?
6
7 all:
8 @echo $(foo)
从结果来看,递归扩展变量的引用是递归的。
CFLAGS =$(CFLAGS) -O
上面的赋值代码将会造成一个死循环,无限递归。
简单变量扩展使用“ :=”操作符来定义的。对于这种变量,make只对其进行一次操作,通过下面的代码来帮助我们理解:
1 .PHONY: all
2
3 x=foo;
4 y=$(x) b
5 x=later
6
7 xx:=foo
8 yy:=$(xx) b
9 xx:=later
10
11 all:
12 @echo "X=$(y), xx=$(yy)"
递归和简单扩展变量相比的差距应该看出来了吧。递归相当于c++中的引用,而简单扩展变量make只对其进行一次展开。
下面对于同一个变量采取不同的赋值操作,看看会有什么效果。
1 .PHONY: all 2 3 objs=main.o foo.o bar.o utils.o 4 objs:=$(objs) another.o 5 6 all: 7 @echo $(objs)
如果把第二个简单扩展变量变成递归的即
objs=$(objs) another.o
make会报错
makefile:4:***递归变量‘objs‘引用本身(最终)。看来想引用自身的递归变量,编译器不会允许这样的行为。
Makefile学习之路——4
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。