目录
2.2 $(patsubst PATTERN, REPLACEMENT, TEXT)
2.5 $(filter PATTERN..., TEXT)
2.6 $(filter-out PATTERN..., TEXT)
3.5 $(addsuffix SUFFIX, NAMES...)
3.6 $(addprefix PREFIX, NAMES...)
1.函数的调用语法
$(函数名 函数的参数) 或 ${函数名 函数的参数}
函数名:make内嵌的函数名,用户自己的函数需要通过make call 函数调用
函数的参数: 多参数用 逗号 隔开
2.文本处理函数
2.1 $(subst FROM, TO, TEXT)
$(subst FROM, TO, TEXT)
功能: 把 TEXT 中的 FROM 字符 替换为 TO
2.2 $(patsubst PATTERN, REPLACEMENT, TEXT)
$(patsubst PATTERN, REPLACEMENT, TEXT)
功能:搜索 TEXT 中以空格分开的单词,符合 PATTERN 模式 替换为 REPLACEMENT
PATTERN: 可以使用通配符 % 代表一个单词中的若干字符
2.3 $(strip STRINT)
$(strip STRINT)
功能:去掉字串 STRINT 开头和结尾的空字符,并将其中多个连续空字符合并为一个空字符
2.4 $(findstring FIND,IN)
$(findstring FIND,IN)
功能:搜索字串 IN 查找 FIND 字串
返回值: 找到返回 FIND 没有返回空
2.5 $(filter PATTERN..., TEXT)
$(filter PATTERN..., TEXT)
功能:TEXT 中所有不符合 PATTERN 模式的单词被过滤
返回值: 空格分割的 TEXT 字串中所有符合模式 PATTERN 的字串
2.6 $(filter-out PATTERN..., TEXT)
$(filter-out PATTERN..., TEXT)
功能:过滤掉 TEXT 满足 PATTERN 模式的单词
返回值: 空格分割的 TEXT 所有不符合模式 PATTERN 的字串
2.7 $(sort LIST)
$(sort LIST)
功能: 给 LIST 字母以首字母为准进行排序(升序), 去掉重复的单词
返回值:空格分割的没有重复单词的字串
2.8 $(word N, TEXT)
$(word N, TEXT)
功能:取 TEXT 中的第 N 个单词
返回值:返回字串 TEXT 中的第 N 个单词
2.9 $(wordlist S, E, TEXT)
$(wordlist S, E, TEXT)
功能: 取出 TEXT 按空格分割的第 S 到 E 的单词串
2.10 $(words TEXT)
$(words TEXT)
功能:字串 TEXT 中单词数目
2.11 $(firstword NAMES...)
$(firstword NAMES...)
功能: 取 NAMES 中的第一个单词
3.文件名处理函数
3.1 $(dir NAMES...)
$(dir NAMES...)
功能:取 NAMES 中各个文件名的目录部分(最后一个 / 之前的部分),没有 / 表示当前目录
3.2 $(notdir NAMES...)
$(notdir NAMES...)
功能:从 NAMES 取出非目录部分
3.3 $(suffix NAMES...)
$(suffix NAMES...)
功能:从 NAMES 取出各个文件名的后缀
3.4 $(basename NAMES...)
$(basename NAMES...)
功能:从文件名序列 NAMES 中取各个文件的前缀序列
![](https://img-blog.csdnimg.cn/7abb53f2c79a47e2a7935d53abb824f8.png)
3.5 $(addsuffix SUFFIX, NAMES...)
$(addsuffix SUFFIX, NAMES...)
功能: 为 NAMES 中每个文件名添加后缀 SUFFIX
3.6 $(addprefix PREFIX, NAMES...)
$(addprefix PREFIX, NAMES...)
功能:添加前缀
3.7 $(join LIST1, LIST2)
$(join LIST1, LIST2)
功能:把字串 LIST1 和 字串 LIST2 各单词进行对应连接
3.8 $(wildcard PATTERN)
$(wildcard PATTERN)
功能:列出当前目录下所有符合模式 PATTERN 格式的文件名
4.make的控制函数
4.1 $(error TEXT...)
$(error TEXT...)
功能:产生致命错误,提出 TEXT 信息给用户,并退出make的执行
返回值:空
4.2 $(warning TEXT...)
$(warning TEXT...)
功能:不会导致致命错误不退出make,只是提示 TEXT...
返回值:空
5.其它函数
5.1 foreach 函数
$(foreach VAR, LIST, TEXT)
功能:循环函数
1.首先展开 VAR LIST 的引用
2.执行时把 LIST 中空格分割的单词依次取出赋值给变量 VAR
3.执行 TEXT 表达式
4.重复直到 LIST 的最后一个单词
返回值: 空格分割的多次表达式 TEXT 的计算结果
举例:
dirs := a b c d
VAR LIST TEXT
files := $(foreach dir, $(dirs), $(wildcard $(dir)/*))
第一次循环: $(dirs) 中的a 赋值给 dir 执行表达式 $(wildcard a/*)
第二次循环: $(dirs) 中的b 赋值给 dir 执行表达式 $(wildcard b/*)
第三次循环: $(dirs) 中的c 赋值给 dir 执行表达式 $(wildcard c/*)
第四次循环: $(dirs) 中的d 赋值给 dir 执行表达式 $(wildcard d/*)
5.2 if 函数
$(if CONDITION, THEN_PART, ELSE-PART)
功能: 如果 CONDITION 展开结果非空,则条件为真,返回 THEN-PART
为假,返回 ELSE-PART
5.3 call 函数
call函数是唯一一个可以创建定制化参数函数的引用函数,使用这个函数可以实现用户自己定义的函数引用
$(call VARIABLE, PARAM, PARAM,...)
功能:把参数 PARAM 依次赋值给临时变量 $(1) $(2)
call 函数对参数数目没有限制
执行时 VARIABLE 被展开为函数上下文有效的临时变量
返回值: 参数值 PARAM 依次替换 $(1) $(2)... 之后变量 VARIABLE 定义的表达式的计算值
5.4 value 函数
$(value VARIABLE)
功能:不对变量 VARIABLE 进行任何展开操作,直接返回变量 VARIBALE 的值
VARIABLE 是变量名,一般不包含 $
返回值:变量 VARIBALE 定义的文本值(变量定义为递归展开式,不对引用展开)
5.5 eval 函数
5.6 origin 函数
$(origin VARIABLE)
功能: 函数 origin 查询参数 VARIABLE 的出处
返回值: 返回 VARIABLE 的定义方式
返回情况分类 变量 VARIABLE
undefined 变量没有被定义
default 变量是默认定义(内嵌变量)
environment 变量是系统环境变量 make 没有使用 -e
enviroment override 变量是系统环境变量 make 使用 -e
file 变量在某一个 makefile 中定义
command line 变量在命令行定义
override 变量在 makefile 文件中定义,并使用 overide 指示符声明
automatic 变量是自动化变量
5.7 shell 函数
6.make 命令行选项
7. override 指示符
8.系统环境变量