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 的内容,且不对其进行任何扩展。