$@ |
自动变量 |
当前规则的目标文件名称。例如:生成目标时被替换为目标文件名。 |
$< |
自动变量 |
当前规则的第一个依赖文件名称,通常用于从单一源文件生成目标文件。 |
$^ |
自动变量 |
当前规则所有依赖文件的列表(去除重复项),常用于链接多个目标文件。 |
$? |
自动变量 |
当前规则中比目标更新的依赖文件列表,用于只编译更新过的文件。 |
$* |
自动变量 |
模式规则中目标文件名中去掉扩展名的部分,常用于从目标文件名中提取“stem”。 |
$(wildcard pattern) |
内置函数 |
返回匹配指定模式(pattern)的所有文件列表,方便动态获取文件列表。 |
$(patsubst pattern, replacement, text) |
内置函数 |
对文本中符合模式的部分进行替换,将匹配 pattern 的部分替换为 replacement。 |
$(subst from, to, text) |
内置函数 |
在 text 中将所有 from 字符串替换为 to,适用于简单的字符串替换。 |
$(shell command) |
内置函数 |
执行 shell 命令,并将输出结果插入到 Makefile 中。 |
$(strip string) |
内置函数 |
去除字符串两端以及中间多余的空白字符,生成格式更紧凑的字符串。 |
$(addprefix prefix, names...) |
内置函数 |
为 names 中的每个元素添加前缀 prefix,常用于构造路径或文件名。 |
$(addsuffix suffix, names...) |
内置函数 |
为 names 中的每个元素添加后缀 suffix,常用于批量添加文件扩展名。 |
$(sort list) |
内置函数 |
对列表中的单词进行排序,并自动去除重复项,生成有序且唯一的列表。 |
$(dir names) |
内置函数 |
返回 names 中每个文件的目录部分。 |
$(notdir names) |
内置函数 |
返回 names 中每个文件的文件名部分(去除目录路径)。 |
$(basename names) |
内置函数 |
返回 names 中每个文件名去掉扩展名的部分。 |
$(suffix names) |
内置函数 |
返回 names 中每个文件名的扩展名部分。 |
$(foreach var, list, text) |
内置函数 |
遍历 list 中的每个元素,将 var 替换为该元素,并依次执行 text,常用于批量生成变量内容。 |
$(if condition, then-part, else-part) |
内置函数 |
条件判断函数:若 condition 非空,则返回 then-part,否则返回 else-part。 |
CC |
常用变量 |
指定编译器,通常为 gcc 或 clang。 |
CFLAGS |
常用变量 |
编译器选项,用于控制编译过程,如优化级别、警告选项等。 |
CPPFLAGS |
常用变量 |
C/C++预处理器选项,通常包括宏定义(-D)和头文件搜索路径(-I)。 |
LDFLAGS |
常用变量 |
链接器选项,指定链接过程中的库搜索路径、运行时库路径等。 |
LDLIBS |
常用变量 |
指定链接时需要链接的库(如 -lm、-lpthread 等)。 |
OBJS |
常用变量 |
项目中的目标文件列表,一般由源文件经过编译生成,用于后续链接生成可执行文件。 |