Makefile 常用函数和变量说明

名称 类型 意义/解释
$@ 自动变量 当前规则的目标文件名称。例如:生成目标时被替换为目标文件名。
$< 自动变量 当前规则的第一个依赖文件名称,通常用于从单一源文件生成目标文件。
$^ 自动变量 当前规则所有依赖文件的列表(去除重复项),常用于链接多个目标文件。
$? 自动变量 当前规则中比目标更新的依赖文件列表,用于只编译更新过的文件。
$* 自动变量 模式规则中目标文件名中去掉扩展名的部分,常用于从目标文件名中提取“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 常用变量 项目中的目标文件列表,一般由源文件经过编译生成,用于后续链接生成可执行文件。