规则与基本语法
Make 的一行必须用 Tab 缩进作为命令行,不能用空格。
| 写法 | 说明 |
|---|
| 目标依赖:deps 更新则执行下方命令 |
| 命令行,行首必须是 Tab 键 |
| 声明伪目标,避免与同名文件冲突 |
| 默认目标(文件中第一个目标) |
| 模式规则,通配匹配 |
| 自动变量:当前目标名 |
| 自动变量:第一个依赖 |
| 自动变量:所有依赖(去重) |
| 自动变量:模式匹配的主干部分 |
| 执行命令但不回显该行 |
| 忽略该命令的失败 |
| 命令前加减号同样忽略错误 |
变量与赋值
| 写法 | 说明 |
|---|
| 递归展开赋值(使用时才求值) |
| 立即展开赋值(定义时求值) |
| 未定义时才赋默认值 |
| 追加内容 |
| 引用变量 |
| 引用变量的等价写法 |
| 执行 shell 命令并取输出 |
| 通配展开为文件列表 |
| 模式替换 |
常用函数
| 写法 | 说明 |
|---|
| 字符串替换 |
| 去掉首尾及多余空白 |
| 查找子串,命中返回 find |
| 保留匹配的模式 |
| 排除匹配的模式 |
| 排序并去重 |
| 取第 n 个词(从 1 开始) |
| 取目录部分 |
| 取文件名部分 |
| 对列表逐项展开 |
| 条件函数 |
条件与命令行选项
| 写法 | 说明 |
|---|
| 相等判断,成对 endif 结尾 |
| 不等判断 |
| 变量是否已定义 |
| 引入其它 Makefile 片段 |
| 导出变量给子进程 |
| 执行指定目标 |
| 并行执行,最多 4 个任务 |
| 只打印将要执行的命令,不真正执行 |
| 无条件重建所有目标 |
| 出错也继续执行其他目标 |
| 命令行覆盖变量 |
使用说明
Makefile 的变量语法、自动变量和模式规则细节多,写构建脚本时经常要回头查。本速查把目标依赖、变量、自动变量、函数与命令行参数分组列出,方便对照。
- 搜索语法或关键字(如 变量、自动变量、模式规则、伪目标)。
- 按分组查看基础语法、变量、规则与函数等。
- 点击复制即可取走可用的 Makefile 片段。
常见问题
- = 和 := 赋值有什么区别?
- = 是延迟展开(递归变量),使用时才求值;:= 是立即展开,赋值时即确定值。
- .PHONY 有什么用?
- 声明伪目标,告诉 make 这些目标不对应真实文件,避免因同名文件存在而跳过执行。
延伸阅读