Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181024
  • 博文数量: 37
  • 博客积分: 1110
  • 博客等级: 少尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-29 22:01
文章分类

全部博文(37)

文章存档

2013年(10)

2011年(2)

2010年(25)

我的朋友

分类: LINUX

2010-11-07 21:39:38

三、文件名处理函数

 

GNU make 除上一节所介绍的内嵌的文本处理函数之外,还存在一些针对于文件名的处理函数。这些函数主要用来对一系列空格分割的文件名进行转换,这些函数的参数被作为若干个文件名来对待。函数对作为参数的一组文件名按照一定方式进行处理并返回空格分割的多个文件名序列。

 

1$(dir NAMES…)

 

函数名称:取目录函数dir

函数功能:从文件名序列NAMES…中取出各个文件名目录部分。文件名的目录部分就是包含在文件名中的最后一个斜线(/)(包括斜线)之前的部分。

   返回值:空格分割的文件名序列NAMES…中每一个文件的目录部分。

函数说明:如果文件名中没有斜线,认为此文件为当前目录(./)下的文件。

示例:

$(dir src/foo.c hacks)

返回值为src/ ./

 

2$(notdir NAMES…)

 

函数名称:取文件名函数——notdir

函数功能:从文件名序列NAMES…中取出非目录部分。目录部分是指最后一个斜线(/(包括斜线)之前的部分。删除所有文件名中的目录部分,只保留非目录部分。

返回值:文件名序列NAMES…中每一个文件的非目录部分。

函数说明:如果NAMES…中存在不包含斜线的文件名,则不改变这个文件名。以反斜线结尾的文件名,是用空串代替,因此当NAMES…中存在多个这样的文件名时,返回结果中分割各个文件名的空格数目将不确定!这是此函数的一个缺陷。

示例:

 

$(notdir src/foo.c hacks)

返回值为:foo.c hacks

 

3$(suffix NAMES…)

 

函数名称:取后缀函数suffix

函数功能:从文件名序列NAMES…中取出各个文件名的后缀。后缀是文件名中最后一个以.开始的(包含点号)部分,如果文件名中不包含一个点号,则为空。

返回值:以空格分割的文件名序列NAMES…中每一个文件的后缀序列。

函数说明:NAMES…是多个文件名时,返回值是多个以空格分割的单词序列。如果文件名没有后缀部分,则返回空。

示例:

 

$(suffix src/foo.c src-1.0/bar.c hacks)

返回值为.c .c

 

4$(basename NAMES…)

 

函数名称:取前缀函数basename

函数功能:从文件名序列NAMES…中取出各个文件名的前缀部分(点号之后的部分)。前缀部分指的是文件名中最后一个点号之前的部分。

返回值:空格分割的文件名序列NAMES…中各个文件的前缀序列。如果文件没有前缀,则返回空字串。

函数说明:如果NAMES…中包含没有后缀的文件名,此文件名不改变。如果一个文件名中存在多个点号,则返回值为此文件名的最后一个点号之前的文件名部分。

示例:

 

$(basename src/foo.c src-1.0/bar.c /home/jack/.font.cache-1 hacks)

返回值为:src/foo src-1.0/bar /home/jack/.font hacks

 

5$(addsuffix SUFFIX,NAMES…)

 

函数名称:加后缀函数addsuffix

函数功能:为NAMES…中的每一个文件名添加后缀SUFFIX。参数NAMES…为空格分割的文件名序列,将SUFFIX追加到此序列的每一个文件名的末尾。

返回值:以单空格分割的添加了后缀SUFFIX的文件名序列。

函数说明:

示例:

$(addsuffix .c,foo bar)

 

返回值为foo.c bar.c

 

6$(addprefix PREFIX,NAMES…)

 

函数名称:加前缀函数addprefix

函数功能:为NAMES…中的每一个文件名添加前缀PREFIX。参数NAMES…是空格分割的文件名序列,将SUFFIX添加到此序列的每一个文件名之前。

返回值:以单空格分割的添加了前缀PREFIX的文件名序列。

函数说明:

示例:

$(addprefix src/,foo bar)

返回值为src/foo src/bar




7$(join LIST1,LIST2)

 

函数名称:单词连接函数——join

函数功能:将字串LIST1和字串LIST2各单词进行对应连接。就是将LIST2中的第一个单词追加LIST1第一个单词字后合并为一个单词;将LIST2中的第二个单词追加到LIST1的第一个单词之后并合并为一个单词,……依次列推。

返回值:单空格分割的合并后的字(文件名)序列。

函数说明:如果LIST1LIST2中的字数目不一致时,两者中多余部分将被作为返回序列的一部分。

示例 1

$(join a b , .c .o)

 

返回值为:a.c b.o

示例 2

$(join a b c , .c .o)

 

返回值为:a.c b.o c

 

8$(wildcard PATTERN)

 

函数名称:获取匹配模式文件名函数wildcard

函数功能:列出当前目录下所有符合模式PATTERN格式的文件名。

返回值:空格分割的、存在当前目录下的所有符合模式PATTERN的文件名。

函数说明:PATTERN使用shell可识别的通配符,包括?(单字符)、*(多字符)等。

示例:

$(wildcard *.c)

 

返回值为当前目录下所有.c 源文件列表。

 

阅读(630) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-08 15:25:42

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com