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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

makefile学习(六)  

2011-11-23 17:02:10|  分类: LINUX编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

makefile学习(六)
这一节主要是讲一下老式的后缀规则,老式的是这种:.c.o:是一种双后缀,它等同的新式的表达方法是:%.o:%.c主要是你知道前者是一种老式的后缀就可以了,他等同的就是后面的说明。

关键字.SUFFIXES: 告诉make 命令哪些扩展名将会在makefile 中使用。在mkfile2中将使用扩展名.txt and .log。有一些扩展名像.c and .o 默认就被makefile支持的,无须使用关键字.SUFFIXES来定义。
说明几个特殊字符:
app: main.o mod_a.o mod_b.o
 $(CC) $(CFLAGS) -o app main.o mod_a.o mod_b.o
//下面四个扩展时只有一个文件
$@:表示规则中的目标文件集,以上面的例子来说,就是app
$<:依赖目标中的第一个目标名字,如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。就例子来说是main.o
$*:表示目标中无后缀部分。就上例来说app。(和$@区别在于当目标有后缀时,比如main.o:main.c 这个是mian,而$@是main.c)
$%:仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a (bar.o)"(说明:即foo.a这个库中有一个文件的名字为bar.o),那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文

件(Unix下是[.a],Windows下是[.lib]),那么,其值为空。

//下面三个扩展时代表一个文件集

$^:表示所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。上例来说就是:main.o mod_a.o mod_b.o
$?:表示所有比目标新的依赖目标的集合。以空格分隔。这个就不用说了吧。
$+:这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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