注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小可尼の博客

Linux后端的技术窝窝

 
 
 

日志

 
 

Makefile变量---简单的文本替换  

2013-12-26 15:54:42|  分类: Makefile的编写 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

出处:http://cache.baiducontent.com/c?m=9d78d513d99c12f60fb9cf205a01d7170e54f7743da7924f2288d85f93154c474571e2cb78714953c7823c390ef50f1aa8e737012a1e70e9c69d9f4aaaead37e739f27432c4bc05c51901eaacc432fc4269458f4fc59a1e1a16cc4b384849907089412187085f58151041e&p=9d7ec54ad5c344ef0be29637575d8c&newp=b479c54ad5c344fd05be9b7c5f0e93231610db2151ddd4162d89&user=baidu&fm=sc&query=makefile+%2EPHONY+%40make&qid=&p1=14

 

这次的试验,只有一个Makefile,别的没有任何文件,通过一个伪目标show来演示变量的使用,好奇葩啊。

cc=gcc
src=a.c b.c

.PHONY:show
show:
	@echo $(cc)
	@echo $(src)

执行make show,将会显示

gcc
a.c b.c

so easy。。。

echo前面为什么要加上@呢?

.PHONY:reason
reason:
	@echo "with @"
	echo "without @"

我们执行make reason,将会输出:

with @
echo "without @"
without @

原来如此,不加@的话,会把本条命令完整的显示出来,然后再显示输出的内容。加上@之后,就只会显示真正要被输出的内容。


还有,Makefile中的变量类似于C语言中的宏,只是简单的文本替换。

city=henan
school=zzti
info=$(city)-$(school)

.PHONY:show
show:
	@echo $(info)

执行makeshow的话,将会输出:

henan-zzti


 

但是,有一种情况给人这种感觉“难道真的是简单的文本替换???”

我们在目录内添加两个文件a.c和b.c,不用写任何内容。

src=*.c
.PHONY:show
show:
	@echo $(src)

执行make show,反正我第一感觉是输出*.c,但是实际输出令我shit。

a.c b.c

这个问题令小弟想了好久,搞不明白。知道膝盖中了一剑。

其实,Makefile中的变量还真的是文本替换,因为@echo $(src)=====@echo *.c

但是,恰好是echo犯病了,把*当做通配符,把本目录内所有以.c结尾的文件都输出了。

可以试一下,直接在终端执行echo *.c,输出的就是a.c和b.c。

下面的例子也是证据:

src=*.c
realsrc=a.c b.c
.PHONY:show
show:
	echo $(src)
	@echo "-------------"
	echo $(realsrc)


注意只有中间的一个echo加了@,输出结果为:

echo *.c
a.c b.c
-------------
echo a.c b.c
a.c b.c


 

echo  $(src)===echo *.c

 所以先输出echo *.c,然后输出a.c b.c

echo $(realsrc)===echo a.c b.c


 试验证明:Makefile中的宏还真的是简单的文本替换。

  评论这张
 
阅读(348)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018