Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1736467
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: LINUX

2012-04-01 17:43:35

函数的调用语法为:
$( )

${ }
函数名与参数间以空格分隔,参数之间以逗号分隔。

字符串处理的函数有:

$(subst ,,)
里的替换为,返回替换后的字符串。

$(patsubst ,,)
里匹配的部分替换为,返回替换后的字符串。

$(strip )里开头和结尾的空格去掉,返回去空格后的字符。

$(findstring ,)里查找,返回(找到)或空字符串(没找到)。

$(filter ,)过滤以保留匹配模式的单词,返回符合的字符串。

$(filter-out ,)
过滤掉里匹配模式的单词,返回不匹配的字符串。

$(sort )对字符串里的单词进程升序排序,并去掉重复的单词。

$(word ,)取出里的第个单词,从1开始。

$(wordlist ,,)
取出里的第到第个单词。

$(words )计算里的单词数。

$(firstword )取出里的第一个单词,等价于$(word 1,)


文件名操作函数有:

$(dir )取出序列中的目录部分。

$(notdir )取出序列中的非目录部分,即文件名。

$(suffix )取出序列的后缀部分。

$(basename )取出序列的除去后缀的部分,包括路径。

$(addsuffix , )加到的每个单词后面,返回加过后缀名的文件名序列。

$(addprefix ,)加到的每个单词前面,返回加过前缀名的文件名序列。

$(join ,)里的单词按顺序相继合并成一个序列。比如$(join a b,1 2 3)会生成a1 b2 3。



foreach函数用于循环,它的用法为:

$(foreach ,,)
中的单词逐个取出放入变量里,再作用到表达式里生成新的单词。每次迭代生成的单词,在最后结果中组成一个序列,以空格分隔。是局部变量,作用域只局限在foreach内部。

比如:
names := a b c d
files := $(foreach n,$(names),$(n).o)
$(files)的最后结果为:a.o b.o c.o d.o


if函数用于分支,用法为:

$(if , )
或是
$(if ,, )


call函数用于生成复杂的表达式,它类似于printf函数,用后续参数来替换第一个参数里的占位符:

$(call ,,,...)

例如:
reverse = $(2) $(1)
foo = $(call reverse,a,b)
此时的 foo 的值就是“b a”。

它的作用决不仅于此。它是一种向用户自定义的函数传递参数的一种方式。


origin函数找到变量的起源,用法为:

$(origin ),参数为变量名(不带$)。

如果变量没有定义,则返回“undefined”。
如果变量是默认定义,比如”CC“,则返回“default”。
如果变量是环境变量,且make的-e参数没有开启,则返回“environment”。
如果变量定义在makefile里,则返回“file”。
如果变量在命令行里定义,则返回“command line”。
如果变量被override重新定义,则返回“override”。
如果变量是自动化变量,比如$@,则返回“automatic”。


shell函数可以执行外壳命令,和反引号`是相同功能。用法为:

$(shell command)


make的控制函数可以控制make的运行。包括:

$(error )输出致命错误信息,中断make。

$(warning )输出警告信息,但不中断make。

$(info )输出消息,但消息里不带有文件名和行号,不像error和warning。
阅读(1144) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~