加载中...
Makefile 是 make 工具的配置文件,通过声明目标与依赖关系来自动化构建任务。它诞生于 1976 年,至今仍广泛用于 C/C++ 项目构建、运维脚本组织和跨语言项目的任务编排。

| 类型 | 构建自动化工具 |
| 首发年份 | 1976 |
| 开发者 | Stuart Feldman(Bell Labs) |
Makefile 的核心逻辑:每个目标(target)有依赖列表和构建命令,make 比较目标文件与依赖文件的修改时间,只有依赖比目标更新时才重新执行命令。这让 C 项目在修改一个 .c 文件后,只重编译受影响的目标文件而不是全量构建,节省大量时间。
Makefile 的语法有几个著名坑:规则缩进必须用 Tab(不能是空格),这个设计决定了 1976 年,设计者 Stuart Feldman 后来承认这是他最后悔的决定之一。变量语法 $(VAR),自动变量 $@(目标名)、$<(第一个依赖)、$^(所有依赖)在复杂规则中频繁出现。[1]
在非 C 项目中,Makefile 常被用作任务运行器:make test 跑测试,make build 打包,make deploy 部署。与 npm scripts 或 shell 脚本相比,Makefile 的优势是依赖追踪(避免重复执行)和 .PHONY 声明伪目标。Go 项目和 C 项目中这种用法非常普遍。
GNU Make 是最广泛使用的实现,macOS 自带的 BSD Make 在部分高级功能上有差异。对于真正复杂的 C/C++ 构建,现代项目倾向于用 CMake(生成 Makefile 或 Ninja 文件)或 Bazel(Google 开源,支持超大型单仓)替代手写 Makefile。

| 类型 | 构建自动化工具 |
| 首发年份 | 1976 |
| 开发者 | Stuart Feldman(Bell Labs) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧