2. 预置函数
以下将以表格的形式列出 Makefile 中 的一些内置函数。
| 函数
说明
示例
$(subst from,to,text)字符串替换
$(subst BC,bc,aBCd) 返回 abcd$(patsubst pattern,replacement,text)模式字符串替换
$(patsubst %.c,%.o,a.c b.c) 返回 a.o b.o$(strip string)去掉字符串两侧的空白字符
$(strip a b c ) 返回 a b c$(findstring find,text)查找字符串,找到返回 find 找不到返回空内容
$(findstring cde,abcdef) 返回 cde$(filter pattern…,text)筛选符合模式的字符串
echo $(filter %o,hello world) 返回 hello$(filter-out pattern…,text)筛选不符合模式的字符串
$(filter-out %o,hello world) 返回 world$(word n,text)返回 text 中的第几个单词
$(word 2,hello world) 返回 world$(shell command)执行Shell 命令,返回 命令的标准输出
$(shell pwd 返回当前的工作路径$(foreach var,list,text)对 list 中的每个单词进行迭代,然后替换成 test。
$(foreach wrd,who are you,$(wrd)!) 返回 who! are! you!以下预置函数将只给出函数和说明。
| 函数
说明
$(sort list)按字典序对列表中的单词进行排序,并移除重复项。
$(words text)统计文本中的单词数量。
$(wordlist s,e,text)返回文本中从第 s 个到第 e 个单词的列表。
$(firstword names…)提取 names 中的第一个单词。
$(lastword names…)提取 names 中的最后一个单词。
$(dir names…)提取每个文件名的目录部分。
$(notdir names…)提取每个文件名的非目录部分。
$(suffix names…)提取每个文件名的后缀(最后一个 '.' 及其后的字符)。
$(basename names…)提取每个文件名的基本名称(不含后缀)。
$(addsuffix suffix,names…)将后缀 suffix 追加到 names 中的每个单词后。
$(addprefix prefix,names…)将前缀 prefix 添加到 names 中的每个单词前。
$(join list1,list2)连接两个并行列表中的单词。
$(wildcard pattern…)查找与 shell 文件名模式(非 '%' 模式)匹配的文件名。
$(realpath names…)对于 names 中的每个文件名,扩展为不含任何 .、.. 或符号链接的绝对路径名。
$(abspath names…)对于 names 中的每个文件名,扩展为不含任何 . 或 .. 成分的绝对路径名,但保留符号链接。
$(error text…)当此函数被求值时,make 会生成一条包含消息 text 的致命错误。
$(warning text…)当此函数被求值时,make 会生成一条包含消息 text 的警告。
$(origin variable)返回一个字符串,描述 make 变量 variable 是如何定义的。
$(flavor variable)返回一个字符串,描述 make 变量 variable 的类型。
$(let var [var ...],words,text)将 vars 绑定到 words 中的单词,然后对 text 进行求值。
$(if condition,then-part[,else-part])对条件 condition 进行求值;如果非空,则替换为 then-part 的扩展结果,否则替换为 else-part 的扩展结果。
$(or condition1[,condition2[,condition3…]])依次对每个条件 conditionN 进行求值;替换为第一个非空的扩展结果。如果所有扩展结果都为空,则替换为空字符串。
$(and condition1[,condition2[,condition3…]])依次对每个条件 conditionN 进行求值;如果任何扩展结果为空字符串,则替换为空字符串。如果所有扩展结果均为非空字符串,则替换为最后一个条件的扩展结果。
$(intcmp lhs,rhs[,lt-part[,eq-part[,gt-part]]])对 lhs 和 rhs 进行数值比较;根据左侧小于、等于或大于右侧的情况,分别替换为 lt-part、eq-part 或 gt-part 的扩展结果。
$(call var,param,…)对变量 var 进行求值,并将任何对 $(1)、$(2) 等的引用替换为第一个、第二个等 param 值。
$(eval text)对 text 进行求值,然后将结果作为 makefile 命令读取。扩展为空字符串。
$(file op filename,text)扩展参数,然后以模式 op 打开文件 filename 并将 text 写入该文件。
$(value var)求值为变量 var 的内容,且不对其进行任何扩展。