分类: LINUX
2011-08-23 14:13:06
函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
$(
或是
${
这里,
1、subst
$(subst
名称:字符串替换函数——subst。
功能:把字串
返回:函数返回被替换过后的字符串。
$(subst ee,EE,feet on the street),
把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”。
2、patsubst
$(patsubst
名称:模式字符串替换函数——patsubst。
功能:查找
$(patsubst %.c,%.o,x.c.c bar.c)
把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”
:objects = foo.o bar.o baz.o,
那么,“$(objects:.o=.c)”和“$(patsubst %.o,%.c,$(objects))”是一样的。
3、strip
$(strip
名称:去空格函数——strip。
功能:去掉
返回:返回被去掉空格的字符串值。
4、findstring
$(findstring
名称:查找字符串函数——findstring。
功能:在字串
返回:如果找到,那么返回
5、filter
$(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”。
6、filter-out
$(filter-out
名称:反过滤函数——filter-out。
功能:以
返回:返回不符合模式
7、sort
$(sort )
名称:排序函数——sort。
功能:给字符串中的单词排序(升序)。
返回:返回排序后的字符串。
8、word
$(word
名称:取单词函数——word。
功能:取字符串
返回:返回字符串
回空字符串。
9、wordlist
$(wordlist ,
名称:取单词串函数——wordlist。
$(wordlist 2, 3, foo bar baz)返回值是“bar baz”。
10、words
$(words
名称:单词个数统计函数——words。
功能:统计
返回:返回
11、firstword
$(firstword
名称:首单词函数——firstword。
功能:取字符串
返回:返回字符串
override 指示符:如果有变量是通常make的命令行参数设置的,那么Makefile中对这个变量的赋值会被忽略。
$(foreach ,,
这个函数的意思是,把参数中的单词逐一取出放到参数所指定的变量中,然后再执行
call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,你可以定义许多参数,然后你可以用call函数来向这个表达式传递参数。其语法是:
$(call
当make执行这个函数时,
reverse = $(1) $(2)
foo = $(call reverse,a,b)
那么,foo的值就是“a b”
shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。
contents := $(shell cat foo)
files := $(shell echo *.c)
有一个make的环境变量叫“MAKECMDGOALS”,这个变量中会存放你所指定的终极目标的列表,如果在命令行上,你没有指定目标,那么,这个变量是空值。这个变量可以让你使用在一些比较特殊的情形下。比如下面的例子:
sources = foo.c bar.c
ifneq ( $(MAKECMDGOALS),clean)
include $(sources:.c=.d)
endif
基于上面的这个例子,只要我们输入的命令不是“make clean”,那么makefile会自动包含“foo.d”和“bar.d”这两个makefile。