码迷,mamicode.com
首页 > 其他好文 > 详细

Makefile学习之路——4

时间:2017-03-31 12:05:57      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:差距   com   类别   分享   bar   another   定义   obj   make   

变量的类别有递归扩展变量和简单扩展变量。只用一个“=”符号定义的变量被称为递归扩展变量。通过下面例子观察递归扩展变量的特点。

 

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

标签:差距   com   类别   分享   bar   another   定义   obj   make   

原文地址:http://www.cnblogs.com/yangguang-it/p/6650456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!