函数
$(funcname arguments)
其中funcname是需要调用函数的函数名称,应该是make内嵌函数;arguments是函数参数,参数和函数名之间使用空格分割,如果存在多个参 数时,参数之间使用逗号“,”分开。函数调用以“$”开头,使用成对的圆括号或花括号把函数名和参数括起,一般使用圆括号。
常用函数
- 获取匹配模式文件名函数—wildcard 。 用法:$(wildcard PATTERN) 该函数会列出当前目录下所有符合模式“PATTERN”格式的文件名。返回空格分割的、存在当前目录下的所有符合模式“PATTERN”的文件名。 例如:
1 SRC_FILES = $(wildcard src/*.c) 返回src目录下所有.c文件列表。
- 字符串替换函数—subst。 用法:$(subst FROM,TO,TEXT) 该函数把字串“TEXT”中的“FROM”字符替换为“TO”,返回替换后的新字符串。
- 模式替换函数—patsubst。 用法:$(patsubst PATTERN,REPLACEMENT,TEXT) 该函数搜索“TEXT”中以空格分开的单词,将符合模式“TATTERN”替换为“REPLACEMENT” 。参数“PATTERN”中可以使用模式通配符“%”,来代表一个单词中的若干字符。如果参数“REPLACEMENT”中也包含一个“%” ,那么“REPLACEMENT”中的“%”将是“TATTERN”中的那个“%”所代表的字符串。 例如:
1 SRC_OBJ = $(patsubst %.c, %.o, $(SRC_FILES)) 将SRC_FILES中所有.c文件替换为.o返回给变量SRC_OBJ。 此函数功能类似之前讲过的变量替换,http://blog.csdn.net/shallnet/article/details/37529935 变量替换格式是“$(var:a=b)”或“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串。 例如我们存在一个代表所有.c 文件的变量。定义为“src_files = a.c b.c c.c” 。 为了得到这些.c文件所对应的.o源文件。如下两种使用可以得到同一种结果::
1 2 $(objects:.c=.o) $(patsubst %.c,%.o,$( src_files))
- 过滤函数—filter。 用法:$(filter PATTERN…,TEXT) 该函数过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。可以使用多个模式。模式中一般需要包含模式字符 “%” 。存在多个模式时,模式表达式之间使用空格分割。返回空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。
- 反过滤函数—filter-out。 用法:$(filter-out PATTERN...,TEXT) 和“filter”函数实现的功能相反。过滤掉字串“TEXT”中所有符合模式“PATTERN” 的单词, 保留所有不符合此模式的单词。 可以有多个模式。存在多个模式时,模式表达式之间使用空格分割。
- 取目录函数—dir。 用法:$(dir NAMES…) 从文件名序列“NAMES…”中取出各个文件名的目录部分。文件名的目录部分就是包含在文件名中的最后一个斜线( “/” ) (包括斜线)之前的部分。返回空格分割的文件名序列“NAMES…”中每一个文件的目录部分。如果文件名中没有斜线,认为此文件为当前目录( “./” )下的文件。
- 取文件名函数——notdir。 用法:$(notdir NAMES…) 从文件名序列“NAMES…”中取出非目录部分。目录部分是指最后一个斜线( “/” ) (包括斜线)之前的部分。删除所有文件名中的目录部分,只保留非目录部分。文件名序列“NAMES…”中每一个文件的非目录部分。
- 取后缀函数—suffix。 用法:$(suffix NAMES…) 函数从文件名序列“NAMES…”中取出各个文件名的后缀。后缀是文件名中最后一个以点“.”开始的(包含点号)部分,如果文件名中不包含一个点号,则为空。 返回以空格分割的文件名序列“NAMES…”中每一个文件的后缀序列。
- 取前缀函数—basename。 用法:$(basename NAMES…) 从文件名序列“NAMES…”中取出各个文件名的前缀部分(点号之后的部分) 。前缀部分指的是文件名中最后一个点号之前的部分。 返回空格分割的文件名序列“NAMES…”中各个文件的前缀序列。如果文件没有前缀,则返回空字串。