一、函数的调用方法
-
调用函数
- 使用 $(<function> <arguments1>,<arguments2>,…)
- 或
- 使用 ${<function> <arguments1>,<arguments2>,…}
- 函数与参数之间用 “ 空格 ”隔开
- 参数与参数之间用 “ ,0 ”隔开
- 例子
comma :=, # 定义一个,
empty := #定义一个空格
space :=$(empty) $(empty)#引用2个空格
foo :=a b c
# $(subst 被替换的字串,替换的字串,替换操作作用的字串)
# 将foo值的 "a b c" 中的 “ ”空格替换成 ","
foo :=$(subst $(space),$(comma),$(foo))
# foo的值为 a,b,c
二、字符串处理函数
-
字符串替换函数- subst
-
$(subst <from>,<to>,<text>)
-
功能:把字串<text>中的<from>字符串替换成<to>
-
返回:函数返回被替换过后的字符串
-
模式字符串替换函数- patsubst
-
$(patsubst <pattern>,<replacement>,<text> )
-
功能:将<text>符合模式<pattern>的字符用 <replacement>字符来代替
-
例子
# 把字串“x.c.c bar.c”符合模式[ %.c ]的单词体寒从[ %.o ]
# 返回结果是“x.c.o bar.o”
$(patsubst %.c,%.o,x.c.c bar.c)
- 与变量章节的知识点有点类似
$(var:<pattern>=<replacement>)
相当于
$(patsubst <pattern>,<replacement>,$(var))
# 把字符串“a b c ”去掉开头和结尾的空格,结果是“a b c”
$(strip a b c )
# 在字符串“a b c”中查找a,返回值为“a”
$(findstring a,a b c)
# 在字符串“a b c”中查找a,返回值为“”空字符串
$(findstring a,b c)
-
过滤函数- filter
- $(filter <pattern…>,<text>)
- 功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词
- 可以有多个模式
- 返回:返回符合模式<pattern>的字符串
- 例子
sources :=foo.c bar.c baz.s ugh.h
foo : $(sources)
cc $(filter %.c %.s,$(sources)) -o foo
# 其返回值是 foo.c bar.c baz.s
-
反过滤函数- filter-out
- $(filter-out <pattern…>,<text> )
- 功能:以<pattern>模式过滤<text>字符串中的单词,
去除符合模式<pattern>的单词,可以有多个模式 - 返回:返回不符合模式<pattern>的字符串
- 例子
objects = main1.o foo.o main2.o bar.o
mains = main1.o main2.o
$(filter-out $(mains),$(objects))
# 其返回值是 foo.o bar.o
#返回值 bar foo lose 按第一个字母大小排升序
$(sort foo bar lose)
-
去单词函数- word
- $(word <n>,<text>)
- 功能:取字符串<text>中第<n>个单词 (从一开始)
- 返回:返回字符串<text>中第<n>个单词,如果<n>比<text>中的单词数要大,
那么返回字符串 - 例子
# 返回值为 bar
$(word 2,foo bar baz)
-
取单词串函数- wordlist
- $(wordlist <s>,<e>,<text>)
- 功能:从字符串<text>中取<s>开始到<e>的单词串,<s>,<e>是数字
- 返回:返回字符串<text>中从
到的单词字串,如果<s>比<text>中的单词数要大,那么返回空字符串,
如果<e>大于<text>的单词数,那么返回从<s>开始,到<text>接收的单词串 - 例子
# 返回值是 “bar baz”
# 1, 2, 3
$(wordlist 2,3,foo bar baz)
# 返回值为 3
$(words foo bar baz)
# 取出<text>的最后一个单词
$(word $(words <text>),<text>)
# 返回值为 foo
$(firstword foo bar)
- 利用搜索路径来指定编译器对头文件的搜索路径参数 CFALGS
- 如
override CFLAGS += $(patsubst %,-I%,$(subst:,,$(VPATH)))
- 如果我们的"$(PATH)"值是 “ src:…/headers ”,那么
“ ( p a t s u b s t (patsubst %,-I%, (patsubst(subst:,$(VPATH))) ”
将返回“ -Isrc -I…/headers ” - 这正是cc或gcc搜索头文件路径的参数