您的位置:首页 > 其它

makefile 常用函数

2013-09-14 20:33 281 查看
在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。

一、函数的调用语法
函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
$( )
或是
${ }
这里,就是函数名,make支持的函数不多。是函数的参数,参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。感觉很像一个变量,是不是?函数中的参数可以使用变量,为了风格的统一,函数和变量的括号最好一样,如使用“$(subst
a,b,$(x))”这样的形式,而不是“$(subst a,b,${x})”的形式。因为统一会更清楚,也会减少一些不必要的麻烦。
还是来看一个示例:
comma:= ,

empty:=

space:= $(empty) $(empty)

foo:= a b c

bar:= $(subst $(space),$(comma),$(foo))
在这个示例中,$(comma)的值是一个逗号。$(space)使用了$(empty)定义了一个空格,$(foo)的值是“a
b c”,$(bar)的定义用,调用了函数“subst”,这是一个替换函数,这个函数有三个参数,第一个参数是被替换字串,第二个参数是替换字串,第三个参数是替换操作作用的字串。这个函数也就是把$(foo)中的空格替换成逗号,所以$(bar)的值是“a,b,c”。
二、字符串处理函数
$(subst ,,)

名称:字符串替换函数——subst。

功能:把字串中的字符串替换成。

返回:函数返回被替换过后的字符串。
示例:

$(subst ee,EE,feet on the street),

把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt
on the strEEt”。

$(patsubst ,,)

名称:模式字符串替换函数——patsubst。

功能:查找中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式,如果匹配的话,则以替换。这里,可以包括通配符“%”,表示任意长度的字串。如果中也包含“%”,那么,中的这个“%”将是中的那个“%”所代表的字串。(可以用“\”来转义,以“\%”来表示真实含义的“%”字符)

返回:函数返回被替换过后的字符串。
示例:
$(patsubst %.c,%.o,x.c.c bar.c)
把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o
bar.o”
备注:
这和我们前面“变量章节”说过的相关知识有点相似。如:

“$(var:=)”

相当于

“$(patsubst ,,$(var))”,

而“$(var: =)”

则相当于

“$(patsubst %,%,$(var))”。

例如有:objects = foo.o bar.o baz.o,

那么,“$(objects:.o=.c)”和“$(patsubst
%.o,%.c,$(objects))”是一样的。
$(strip )
名称:去空格函数——strip。

功能:去掉字串中开头和结尾的空字符。

返回:返回被去掉空格的字符串值。

示例:

$(strip a b c )
把字串“a b c
”去到开头和结尾的空格,结果是“a b c”。
$(findstring ,)
名称:查找字符串函数——findstring。

功能:在字串中查找字串。

返回:如果找到,那么返回,否则返回空字符串。

示例:
$(findstring a,a b c)

$(findstring a,b c)
第一个函数返回“a”字符串,第二个返回“”字符串(空字符串)
$(filter ,)
名称:过滤函数——filter。

功能:以模式过滤字符串中的单词,保留符合模式的单词。可以有多个模式。

返回:返回符合模式的字串。

示例:
sources := foo.c bar.c baz.s ugh.h

foo: $(sources)

cc $(filter %.c %.s,$(sources)) -o foo
$(filter %.c %.s,$(sources))返回的值是“foo.c bar.c baz.s”。
$(filter-out ,)
名称:反过滤函数——filter-out。

功能:以模式过滤字符串中的单词,去除符合模式的单词。可以有多个模式。

返回:返回不符合模式的字串。

示例:
objects=main1.o foo.o main2.o bar.o

mains=main1.o main2.o

$(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”。

$(sort )
名称:排序函数——sort功能:给字符串中的单词排序(升序)。返回:返回排序后的字符串。示例:$(sort foo bar lose)返回“bar
foo lose
备注:sort函数会去掉中相同的单词。
[b]$(word ,)[/b]
名称:取单词函数——word功能:取字符串中第个单词。(从一开始)返回:返回字符串中第个单词。如果中的单词数要大,那么返回空字符串。示例:$(word 2, foo bar baz)返回值是“bar”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: