找回密码
 注册
搜索

20. make之六(makefile与函数)

已有 207 次阅读2014-2-6 19:54 |个人分类:Linux编程| make, makefile, 函数, Linux编程, linux编程

       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)的值是“abc”。

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函数将执行系统命令后的输出作为返回值,可以用系统命令及字符串处理命令awksed等命令来生成一个变量,例如:

       contents:=$(shell cat foo)

       files:=$(shell echo *.c)

该函数将新开一个shell来执行命令,需要注意其运行性能,如果makefile中有一些比较复杂的规则,并且大量使用了该函数,是会影响系统性能的。特别是makefile的隐含规则可能会让shell函数执行的次数比想象的多得多。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

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.

返回顶部