Makefile函数

上传人:飞*** 文档编号:47424056 上传时间:2018-07-02 格式:PDF 页数:19 大小:25.84KB
返回 下载 相关 举报
Makefile函数_第1页
第1页 / 共19页
Makefile函数_第2页
第2页 / 共19页
Makefile函数_第3页
第3页 / 共19页
Makefile函数_第4页
第4页 / 共19页
Makefile函数_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《Makefile函数》由会员分享,可在线阅读,更多相关《Makefile函数(19页珍藏版)》请在金锄头文库上搜索。

1、Makefile 函数一、文本处理函数以下是 GNU make内嵌的文本(字符串)处理函数。1 .$(subst FROM,TO,TEXT) 函数名称:字符串替换函数subst。函数功能:把字串“ TEXT ”中的“ FROM ”字符替换为“ TO” 。返回值:替换后的新字符串。例 1:$(substee,EE,feet on the street) 替换“feet on the street”中的“ee”为“EE ” ,结果得到字符串“ fEEt on the strEEt ” 。2. $(patsubst PATTERN,REPLACEMENT,TEXT) 函数名称:模式替换函数patsu

2、bst。函数功能:搜索“ TEXT ”中以空格分开的单词,将否符合模式“TATTERN ”替换为“ REPLACEMENT” 。参数“PATTERN ”中可以使用模式通配符“% ”来代表一个单词中的若干字符。如果参数“REPLACEMENT”中也包含一个“ %” ,那么“REPLACEMENT”中的“ %”将是“ TATTERN ”中的那个“ % ”所代表的字符串。在“TATTERN ”和“ REPLACEMENT”中,只有第一个“ %”被作为模式字符来处理,之后出现的不再作模式字符(作为一个字符)。在参数中如果需要将第一个出现的“%”作为字符本身而不作为模式字符时,可使用反斜杠“”进行转义处

3、理。返回值:替换后的新字符串。函数说明:参数“ TEXT ”单词之间的多个空格在处理时被合并为一个空格,并忽略前导和结尾空格。示例:$(patsubst %.c,%.o,x.c.cbar.c) 把字串“ x.c.cbar.c ”中以 .c结尾的单词替换成以 .o 结尾的字符。函数的返回结果是“ x.c.obar.o ”变量的替换引用,它是一个简化版的“patsubst”函数在变量引用过程的实现。变量替换引用中:$(VAR:PATTERN=REPLACEMENT) 就相当于:$(patsubst PATTERN,REPLACEMENT,$(VAR) 而另外一种更为简单的替换字符后缀的实现:$(V

4、AR:SUFFIX=REPLACEMENT) 它等于:$(patsubst %SUFFIX,%REPLACEMENT,$(VAR) 例如我们存在一个代表所有.o 文件的变量。定义为“ objects = foo.obar.obaz.o” 。为了得到这些 .o 文件所对应的 .c 源文件。我们可以使用以下两种方式的任意一个:$(objects:.o=.c) $(patsubst %.o,%.c,$(objects) patsubst 三个操作数用逗号隔开作用:将 foo 的所有由空格隔开的字符串尾的.c用.o 代替出错提示: Makefile:4: * insufficient number o

5、f arguments (2) to function patsubst. Stop. 格式举例: bar := $(patsubst %.c,%.o,$(foo) 3. $(strip STRINT) 函数名称:去空格函数 strip。函数功能:去掉字串(若干单词,使用若干空字符分割)“STRINT ”开头和结尾的空字符,并将其中多个连续空字符合并为一个空字符。返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。函数说明:空字符包括空格、Tab等不可显示字符。示例:STR =. a b c LOSTR = $(strip $(STR) 结果是“ a b c” 。“strip”函数经常

6、用在条件判断语句的表达式中,确保表达式比较的可靠和健壮!4.$(findstring FIND,IN) 函数名称:查找字符串函数findstring。函数功能:搜索字串“ IN” ,查找“ FIND ”字串。返回值:如果在“ IN”之中存在“ FIND ” ,则返回“ FIND” ,否则返回空。函数说明:字串“ IN”之中可以包含空格、 Tab。搜索需要是严格的文本匹配。示例:$(findstringa,a b c) $(findstringa,b c) 第一个函数结果是字“ a” ;第二个值为空字符。5.$(filter PATTERN,TEXT)函数名称:过滤函数 filter。函数功能:

7、过滤掉字串“ TEXT ”中所有不符合模式“ PATTERN ”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符“%” 。存在多个模式时,模式表达式之间使用空格分割。返回值:空格分割的“ TEXT ”字串中所有符合模式“ PATTERN ”的字串。函数说明:“filter ”函数可以用来去除一个变量中的某些字符串,我们下边的例子中就是用到了此函数。示例:sources := foo.cbar.cbaz.sugh.h foo: $(sources) cc $(filter %.c %.s,$(sources) -o foo 使用“$(filter %.c %.s,$

8、(sources) ”的返回值给 cc来编译生成目标“ foo” ,函数返回值为“ foo.cbar.cbaz.s ” 。6.$(filter-out PATTERN.,TEXT) 函数名称:反过滤函数 filter-out 。函数功能:和“ filter ”函数实现的功能相反。过滤掉字串“TEXT ”中所有符合模式“ PATTERN ”的单词,保留所有不符合此模式的单词。可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。返回值:空格分割的“ TEXT ”字串中所有不符合模式“PATTERN ”的字串。函数说明: “filter-out ”函数也可以用来去除一个变量中的某些字符串,(

9、实现和“ filter”函数相反)。示例:objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o $(filter-out $(mains),$(objects) 实现了去除变量“ objects”中“ mains”定义的字串(文件名)功能。它的返回值为“ foo.obar.o” 。7.$(sort LIST) 函数名称:排序函数 sort。函数功能:给字串“ LIST ”中的单词以首字母为准进行排序(升序),并去掉重复的单词。返回值:空格分割的没有重复单词的字串。函数说明:两个功能, 排序和去字串中的重复单词。可以单独使用其中一个功

10、能。示例:$(sort foo bar lose foo) 返回值为:“bar foo lose” 。8.$(word N,TEXT) 函数名称:取单词函数 word。函数功能:取字串“ TEXT ”中第“ N”个单词(“N”的值从 1 开始) 。返回值:返回字串“ TEXT ”中第“ N”个单词。函数说明:如果“ N”值大于字串“ TEXT ”中单词的数目,返回空字符串。如果“ N”为 0,出错!示例:$(word 2, foo bar baz) 返回值为“ bar” 。9.$(wordlist S,E,TEXT) 函数名称:取字串函数 wordlist。函数功能:从字串“TEXT ”中取出

11、从“S”开始到“E”的单词串。 “S ”和“E”表示单词在字串中位置的数字。返回值:字串“ TEXT ”中从第“ S”到“ E ” (包括“ E” )的单词字串。函数说明:“S”和“ E”都是从 1 开始的数字。当“S ”比“ TEXT ”中的字数大时,返回空。如果“E”大于“ TEXT ”字数,返回从“ S ”开始,到“ TEXT ”结束的单词串。如果“ S”大于“ E” ,返回空。示例:$(wordlist 2, 3, foo bar baz) 返回值为:“bar baz” 。10 $(words TEXT) 函数名称:统计单词数目函数words。函数功能:字算字串“ TEXT ”中单词的

12、数目。返回值: “TEXT ”字串中的单词数。示例:$(words, foo bar) 返回值是“ 2” 。所以字串“ TEXT ”的最后一个单词就是: $(word $(words TEXT),TEXT)。11 $(firstword NAMES)函数名称:取首单词函数firstword。函数功能:取字串“ NAMES , ”中的第一个单词。返回值:字串“ NAMES , ”的第一个单词。函数说明:“NAMES ”被认为是使用空格分割的多个单词(名字)的序列。函数忽略“ NAMES , ”中除第一个单词以外的所有的单词。示例:$(firstword foo bar) 返回值为“foo” 。

13、函数 “firstword” 实现的功能等效于 “$(word 1, NAMES , )” 。以上 11 个函数是 make内嵌的的文本处理函数。书写Makefile 时可搭配使用来实现复杂功能。 最后我们使用这些函数来实现一个实际应用。例子中我们使用函数“ subst”和“ patsbust” 。Makefile 中可以使用变量“ VPATH ”来指定搜索路径。对于源代码所包含的头文件的搜索路径需要使用gcc的“-I”参数指定目录来实现,“VPATH ”罗列的目录是用冒号“ :”分割的。如下就是Makefile 的片段:,VPATH = src:./includes override CFL

14、AGS += $(patsubst %,-I%,$(subst :, ,$(VPATH) ,. 那么第二条语句所实现的功能就是“CFLAGS += -IsrcI./includes” 。二、文件名处理函数GNU make除支持文本处理函数之外, 还支持一些针对于文件名的处理函数。这些函数主要用来对一系列空格分割的文件名进行转换,这些函数的参数被作为若干个文件名来对待。 函数对作为参数的一组文件名按照一定方式进行处理并返回空格分割的多个文件名序列。1.$(dir NAMES )函数名称:取目录函数 dir。函数功能:从文件名序列“ NAMES , ”中取出各个文件名的目录部分。文件名的目录部分就

15、是包含在文件名中的最后一个斜线(“/” ) (包括斜线)之前的部分。返回值:空格分割的文件名序列“NAMES , ”中每一个文件的目录部分。函数说明:如果文件名中没有斜线,认为此文件为当前目录(“./” )下的文件。示例:$(dirsrc/foo.c hacks) 返回值为“ src/ ./” 。2.$(notdir NAMES )函数名称:取文件名函数notdir。函数功能:从文件名序列“ NAMES , ”中取出非目录部分。目录部分是指最后一个斜线( “/” ) (包括斜线)之前的部分。删除所有文件名中的目录部分,只保留非目录部分。返回值:文件名序列“ NAMES , ”中每一个文件的非目

16、录部分。函数说明:如果“ NAMES , ”中存在不包含斜线的文件名,则不改变这个文件名。以反斜线结尾的文件名,是用空串代替,因此当“NAMES , ”中存在多个这样的文件名时, 返回结果中分割各个文件名的空格数目将不确定!这是此函数的一个缺陷。示例:$(notdirsrc/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 NA

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号