||
在makefile中可以使用函数来处理变量,从而让命令或规则更为灵活和智能。函数调用后,函数的返回值可以当作变量来使用。
1. 函数调用的语法
函数调用很像变量的使用,也是以“$”来标识的,其语法如下:
$(<function><arguments>)或是 ${<function><arguments>}
Comma:=,
Empty:=
Space:=$(empty)
For:= a b c
Bar:=$(subst $(space),$(comma),$(foo))
在这个示例中,$(comma)的值是一个逗号,$(space)使用$(empty)定义了一个空格,$(foo)的值是“a b c”,$(bar)的定义调用了函数sunst,这是一个替换函数,这个函数有三个参数,第一个参数是被替换字串,第二个参数是替换字串,第三个参数是需要执行替换操作的字串。这个函数将$(foo)中的空格替换成逗号,所以$(bar)的值是“a,b,c”。
2. subst
$(subst <from>,<to>,<text>)
名称:字符串替换函数
功能:把字串<text>中的<from>字符串替换成<to>
返回:函数返回被替换后的字符串
示例:
$(subs tee, EE, feet on the street)
把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”。
3. strip
$( strip <string>)
名称:去掉空格函数
功能:去掉<string>字串中开头和结尾的空字符
返回:返回被去掉空格的字符串值
示例:
$(strip a b c )
把字串“ a b c ”去掉开头和结尾的空格,结果是“a b c”。
4. dir
$( dir <names….>)
名称:取目录函数
功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠“/”之前的部分。如果没有反斜杠,则返回“./”
返回:返回文件名序列<names>的目录部分
示例:
$(dir src/foo.c hacks ) 的返回值是“src/ ./”
5. join
$( join <list1>,<list2>)
名称:连接函数
功能:把<list2>中的单词对应地加到<list1>的单词的后面。如果<list1>的单词个数比<list2>的多,则<list>中多出来的单词将保持原样;如果<list2>的单词个数比<list1>多,则<list2>多出来的单词将被复制到<list1>中。
返回:返回连接后的字符串
示例:
$(join aaa bbb, 111 222 333)的返回值是“aaa111 bbb222 333”
6. shell
shell 函数,顾名思义,它的参数应该是操作系统Shell的命令,它和反引号“`”具有相同的功能。Shell函数将执行系统命令后的输出作为返回值,可以用系统命令及字符串处理命令awk、sed等命令来生成一个变量,例如:
contents:=$(shell cat foo)
files:=$(shell echo *.c)
该函数将新开一个shell来执行命令,需要注意其运行性能,如果makefile中有一些比较复杂的规则,并且大量使用了该函数,是会影响系统性能的。特别是makefile的隐含规则可能会让shell函数执行的次数比想象的多得多。
Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )
GMT+8, 2024-11-24 07:23 , Processed in 0.029364 second(s), 18 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.