本附录汇总了GNU的make能够识别的指令(directive)、文本处理函数和特殊变量。
其他汇总请参阅内置的特殊目标名、内置规则目录、选项汇总各节。
首先是GNU的make能够识别的指令一览:
define variabledefine variable =define variable :=define variable ::=define variable :::=define variable +=define variable ?=endef定义跨多行的变量。
请参阅定义多行变量一节。
undefine variable取消变量的定义。
请参阅取消变量的定义一节。
ifdef variableifndef variableifeq (a,b)ifeq "a" "b"ifeq 'a' 'b'ifneq (a,b)ifneq "a" "b"ifneq 'a' 'b'elseendif根据条件评估makefile的一部分。
请参阅Makefile的条件分支一节。
include file-include filesinclude file读入另一个makefile。
请参阅读入其他Makefile一节。
override variable-assignment定义变量。即使之前的定义是在命令行上指定的,也会被覆盖。
请参阅override指令一节。
export指示make默认将所有变量导出到子进程。
请参阅向子 make 传递变量一节。
export variableexport variable-assignmentunexport variable指示make是否将某个特定变量导出到子进程。
请参阅向子 make 传递变量一节。
private variable-assignment使该变量赋值不被前置条件 (prerequisite) 继承。
请参阅抑制继承一节。
vpath pattern path为匹配‘%’模式的文件指定搜索路径。
请参阅vpath指令一节。
vpath pattern删除之前为pattern指定的所有搜索路径。
vpath删除之前在任意vpath指令中指定的所有搜索路径。
接下来是内置函数一览(请参阅转换文本的函数):
$(subst from,to,text)将text中的from替换为to。
请参阅用于字符串替换和分析的函数一节。
$(patsubst pattern,replacement,text)将text中匹配pattern的词替换为replacement。
请参阅用于字符串替换和分析的函数一节。
$(strip string)从string中去除多余的空白字符。
请参阅用于字符串替换和分析的函数一节。
$(findstring find,text)在text中查找find。
请参阅用于字符串替换和分析的函数一节。
$(filter pattern…,text)从text中选出匹配任一pattern词的词。
请参阅用于字符串替换和分析的函数一节。
$(filter-out pattern…,text)从text中选出不匹配任何pattern词的词。
请参阅用于字符串替换和分析的函数一节。
$(sort list)将list中的词按字典序排序,并去除重复项。
请参阅用于字符串替换和分析的函数一节。
$(word n,text)取出text中第n个(从1开始)词。
请参阅用于字符串替换和分析的函数一节。
$(words text)统计text中包含的词的数量。
请参阅用于字符串替换和分析的函数一节。
$(wordlist s,e,text)返回text中从第s个到第e个词组成的列表。
请参阅用于字符串替换和分析的函数一节。
$(firstword names…)取出names的第一个词。
请参阅用于字符串替换和分析的函数一节。
$(lastword names…)取出names的最后一个词。
请参阅用于字符串替换和分析的函数一节。
$(dir names…)取出每个文件名的目录部分。
请参阅处理文件名的函数一节。
$(notdir names…)取出每个文件名中目录以外的部分。
请参阅处理文件名的函数一节。
$(suffix names…)取出每个文件名的后缀(最后一个‘.’及其后续字符)。
请参阅处理文件名的函数一节。
$(basename names…)取出每个文件名的基本名(去掉后缀后的名称)。
请参阅处理文件名的函数一节。
$(addsuffix suffix,names…)在names的每个词末尾追加suffix。
请参阅处理文件名的函数一节。
$(addprefix prefix,names…)在names的每个词开头添加prefix。
请参阅处理文件名的函数一节。
$(join list1,list2)将两个并列列表中的词逐一连接起来。
请参阅处理文件名的函数一节。
$(wildcard pattern…)查找匹配shell文件名模式(不是‘%’模式)的文件名。
请参阅wildcard函数一节。
$(realpath names…)对names中的每个文件名,展开为不包含任何.、..或符号链接的绝对名称。
请参阅处理文件名的函数一节。
$(abspath names…)对names中的每个文件名,展开为不包含任何.或..组成部分的绝对名称,但会保留符号链接。
请参阅处理文件名的函数一节。
$(error text…)当该函数被评估时,make会显示消息text并产生一个致命错误。
请参阅控制Make的函数一节。
$(warning text…)当该函数被评估时,make会显示消息text并产生一个警告。
请参阅控制Make的函数一节。
$(shell command)执行一条shell命令并返回其输出。
请参阅shell函数一节。
$(origin variable)返回一个字符串,描述make变量variable是如何被定义的。
请参阅origin函数一节。
$(flavor variable)返回一个字符串,描述make变量variable的种类 (flavor)。
请参阅flavor函数一节。
$(let var [var ...],words,text)将var各变量绑定到words的各个词上,然后评估text。
请参阅let函数一节。
$(foreach var,words,text)将var绑定到words的每个词上并评估text,然后将各结果连接起来。
请参阅foreach函数一节。
$(if condition,then-part[,else-part])评估条件condition。若其非空,则替换为then-part的展开结果,否则替换为else-part的展开结果。
请参阅用于条件分支的函数一节。
$(or condition1[,condition2[,condition3…]])逐一评估各条件conditionN,替换为第一个非空的展开结果。若所有展开结果都为空,则替换为空字符串。
请参阅用于条件分支的函数一节。
$(and condition1[,condition2[,condition3…]])逐一评估各条件conditionN。只要其中任意一个的展开结果为空字符串,就替换为空字符串。若所有展开结果都为非空字符串,则替换为最后一个condition的展开结果。
请参阅用于条件分支的函数一节。
$(intcmp lhs,rhs[,lt-part[,eq-part[,gt-part]]])将lhs和rhs作为数值进行比较。根据左侧小于、等于还是大于右侧,分别替换为lt-part、eq-part、gt-part的展开结果。
请参阅用于条件分支的函数一节。
$(call var,param,…)评估变量var。其间,将$(1)、$(2)之类的引用替换为第1个、第2个……param的值。
请参阅call函数一节。
$(eval text)评估text,然后将其结果作为makefile命令读入。展开结果为空字符串。
请参阅eval函数一节。
$(file op filename,text)展开各参数,然后以模式op打开文件filename,并将text写入该文件。
请参阅file函数一节。
$(value var)将变量var的内容原样作为评估结果,不对其进行任何展开。
请参阅value函数一节。
接下来是自动变量一览。 详情请参阅自动变量一节。
$@目标的文件名。
$%当目标是归档文件 (archive) 的成员时,该成员的名称。
$<第一个前置条件 (prerequisite) 的名称。
$?所有比目标更新的前置条件的名称,彼此之间以空格分隔。
对于属于归档成员的前置条件,只使用所指定的成员(请参阅用make更新归档文件)。
$^$+所有前置条件的名称,彼此之间以空格分隔。对于属于归档成员的前置条件,只使用所指定的成员(请参阅用make更新归档文件)。$^的值会去除重复的前置条件,而$+则保留重复项并保持其顺序。
$*隐含规则匹配时的词干 (stem)(请参阅模式如何匹配)。
$(@D)$(@F)$@的目录部分,以及目录内的文件部分。
$(*D)$(*F)$*的目录部分,以及目录内的文件部分。
$(%D)$(%F)$%的目录部分,以及目录内的文件部分。
$(<D)$(<F)$<的目录部分,以及目录内的文件部分。
$(^D)$(^F)$^的目录部分,以及目录内的文件部分。
$(+D)$(+F)$+的目录部分,以及目录内的文件部分。
$(?D)$(?F)$?的目录部分,以及目录内的文件部分。
以下变量由GNU的make特殊使用:
MAKEFILES每次启动make时都会读入的makefile。
请参阅变量MAKEFILES一节。
VPATH用于查找在当前目录中找不到的文件的目录搜索路径。
请参阅针对所有前置条件的VPATH搜索路径一节。
SHELL系统默认命令解释器的名称,通常是/bin/sh。
在makefile中设置SHELL即可更改用于执行命令 (recipe) 的shell。请参阅命令的执行。在从环境导入以及导出到环境时,SHELL变量会被特殊处理。请参阅选择Shell。
MAKESHELL仅在MS-DOS上使用,指make所用命令解释器的名称。该值优先于SHELL的值。请参阅MAKESHELL变量。
MAKE启动make时所用的名称。在命令 (recipe) 中使用该变量具有特殊含义。请参阅MAKE变量的工作方式。
MAKE_VERSION内置变量‘MAKE_VERSION’会展开为GNU的make程序的版本号。
MAKE_HOST内置变量‘MAKE_HOST’会展开为一个字符串,表示GNU的make被构建为在其上运行的主机。
MAKELEVEL递归(子 make)的层级深度。
请参阅向子 make 传递变量一节。
MAKEFLAGS传给make的标志。可以在环境或makefile中设置它来设置标志。
请参阅向子 make 传递选项一节。
在命令 (recipe) 行中直接使用MAKEFLAGS绝不合适,因为其内容未必为了在shell中使用而被正确引用。请务必让递归的make能够通过环境从父进程获取这些值。
GNUMAKEFLAGSmake解析的其他标志。可以在环境或makefile中设置它来设置make的命令行标志。GNU的make从不自行设置该变量。只有当你想在符合POSIX的makefile中设置GNU的make专有标志时,才需要该变量。该变量会被GNU的make识别,而被其他make实现忽略。如果你只使用GNU的make则无需它,这种情况下直接使用MAKEFLAGS即可。
请参阅向子 make 传递选项一节。
MAKECMDGOALS在命令行上传给make的目标。设置该变量不会对make的运行产生任何影响。
请参阅指定目标的参数一节。
CURDIR设置为当前工作目录的绝对路径名(如果有任何-C选项,则在其全部处理完之后)。设置该变量不会对make的运行产生任何影响。
请参阅make的递归用法一节。
SUFFIXESmake读入任何makefile之前的默认后缀列表。
.LIBPATTERNS定义make所搜索的库的命名规则及其搜索顺序。
请参阅链接库的目录搜索一节。