Makefile学习(5)
这周学习学习函数的知识。(后天就放假了,很期待!)
1.函数的语法:
?
$(<function> <arguments>)或者${<function> <arguments>}
?其中:
<function>是函数名<arguments>是函数的参数,参数间以逗号“,”分隔函数名和参数之间以“空格”分隔函数调用以“$”开头,以圆括号或者花括号把函数名和参数括起?
2.示例:
comma:=,empty:=space:=$(empty) $(empty)foo:=a b c bar:=$(subst $(space),$(comma),$(foo))
其中:
$(comma)的值是一个逗号$(space)使用了$(empty)定义了一个空格$(foo)的值是“a b c”函数“subst”是一个替换函数,这个函数有三个参数,第一个参数是被替换的字串,第二个参数是替换字串,第三个参数是替换操作作用的字串,这个函数也就是把$(foo)中的空格提啊换成“,”。$(bar)调用了函数“subst”,所以$(bar)的值是“a,b,c”?
3.字符串处理函数
3.1字符串替换函数
函数名:subst语法:$(subst <from>,<to>,<text>)功能:把字串<text>中的<from>字符串替换成<to>返回:返回被替换过后的字符串示例:$(subst ee,EE, feet on the street)?说明:把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”
?
3.2模式字符串替换函数
函数名:patsubst语法:$(patsubst <pattern>,<replacement>,<text>)功能:查找<text>中的单词(单词以“空格”、“Tab”或着“回车”、“换行”分隔)是否符合模式<pattern>,如果匹配,则以<replacement>替换。这里<pattern>可以包括通配符"%",表示任意长度的字串。如果<replacement>中包含"%",那么<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“\%”表示真实含义的“%”)返回:返回被替换过后的字符串示例:$(patsubst %.c,%.o,x.c.c bar.c?说明:把“x.c.c bar.c”符合模式[%.c]的单词换成[%.o],返回结果是“x.c.o bar.o”
?
3.1.3去掉空格函数
函数名:strip语法:$(strip<string>)功能:去掉<string>字串中开头和结尾的空格,类似与trim()返回:返回被去掉空格的字符串值示例:$(strip a b c )?说明:把“a b c ”字串中开头和结尾的空格去掉,返回结果是“a b c”
?
3.1.4查找字符串函数
函数名:findstring语法:$(findstring <find>,<in>)功能:在字串<in>中查找<find>字串返回:如果找到,则返回<find>,否则返回空字符串示例:$(findstring a,a b c)$(findstring a,b,c)?说明:第一个函数返回“a”,第二个函数返回“ ”字符串(空字符串)
?
3.1.5过滤函数
函数名:filter语法:$(filter <pattern...>,<text>)功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以有多个模式返回:返回符合模式<pattern>的字串示例:
sources:=foo.c bar.c baz.s ugh.hfoo:$(sources)? ? cc $(filter %.c %.s,$(sources)) -o foo
说明:$(filter %.c %.s,$(sources))返回值是“foo.c bar.c baz.s”
?
3.1.6反过滤函数
函数名:filter-out语法:$(filter-out <pattern...>,<text>)功能:以<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。可以有多个模式返回:返回不符合模式<pattern>的字串示例:
objects=main1.o foo.o main2.o bar.omains=main1.o ?main2.o$(filter-out $(mians),$(objects))
说明:$(filter-out $(mains),$(objecrs))返回值是“foo.o bar.o”
?
3.1.7排序函数
函数名:sort语法:$(sort<list>)功能:给字符串<list>中的单词排序(升序)返回:返回排序后的字串示例:
$(sort foo bar lose)
说明:
返回值是“bar foo lose”sort函数会去掉<list>中相同的单词
?
3.1.8取单词函数
函数名:word语法:$(word <n>,<text>)功能:取字符串<text>中第<n>个单词(从1开始)返回:返回字符串<text>中第<n>个单词。如果<n>比<text>中的单词数要大,则返回空字符串示例:
$(word 2,foo bar lose)
说明:返回值是“bar”
?
3.1.9取单词串函数
函数名:wordlist语法:$(wordlist <s>,<e>,<text>)功能:从字符串<text>中取从<s>开始到<e>个单词串。<s><e>是一个数字返回:返回字符串<text>中从<s>开始到<e>个单词串。如果<s>比<text>中的单词数要大,则返回空字符串;如果<e>大于单词数,则从<s>开始,到结束示例:
$(wordlist 2,3,foo bar lose)
说明:返回值是“bar lose”
?
3.1.10单词个数统计函数
函数名:words语法:$(words<text>)功能:统计<text>中字符串中单词个数返回:返回字符串<text>中单词数示例:$(words foo bar lose)说明:返回值是“3”
?
?
3.1.11首单词函数
函数名:firstword语法:$(firstword <text>)功能:从字符串<text>中取第一个单词返回:返回字符串<text>中第一个单词示例:$(firstword foo bar lose)说明:返回值是“foo”