资讯动态

Linux 学习笔记(九):自动化构建神器 Make 与 Makefile

发布时间:2026/10/23 3:03:46 来源:尧图企业网站定制
一、 为什么需要 Makefile上一节学了 GCC 编译但如果一个项目有几十个源文件且每次只改了一个文件手动敲 gcc 命令重新编译所有文件是非常低效的。Makefile 解决了两个大问题把复杂的编译命令封装起来只需敲一个make就能编译整个项目。实现“增量编译”它通过对比源文件和目标文件的修改时间只编译修改过的文件。二、 Makefile 的编写规则核心公式是目标 : 依赖换行后写命令。⚠️ 最大的天坑命令前面必须按 Tab 键绝对不能用空格否则会报错missing separator。三、 实战演示1. 最基础的 Makefilehello: hello.c gcc hello.c -o hello执行make系统会自动调用对应的 gcc 命令。2. 伪目标 .PHONY当我们需要执行一些清理动作如make clean删除编译产物时为了防止同名的文件干扰需要声明伪目标。.PHONY: clean clean: rm -f hello声明为.PHONY后make clean总是会被无条件执行。3. 使用变量优化为了让 Makefile 更具扩展性我们可以引入变量BIN hello SRC hello.c $(BIN): $(SRC) gcc $(SRC) -o $(BIN) .PHONY: clean clean: rm -f $(BIN)总结make是一个命令Makefile是一个规则文件。它通过比较文件的Modify时间修改时间来决定是否重新编译极大地提升了开发效率。自我实战操作linux_study/gcc_test目录里操作。实战 1写第一个 Makefilecd ~/linux_study/gcc_test vim Makefile # 注意首字母大写或者全小写 makefile 也行在 Vim 里按i进入插入模式输入以下内容(注意第二行的开头必须按一下键盘上的 Tab 键千万别敲空格)hello: hello.c gcc hello.c -o hello按Esc输入:wq保存退出。实战 2使用 make 编译# 1. 删掉之前手动编译的旧文件确保干净 rm -f hello # 2. 直接敲 make 命令 make # 输出gcc hello.c -o hello 它自动读取了 Makefile 并执行了里面的命令 # 3. 验证一下程序 ./hello实战 3体验 Make 的“智能”特性# 1. 再次敲 make make # 输出make: hello is up to date. 它会说 hello 已经是最新的了不重复编译省时间 # 2. 我们用 touch 修改一下 hello.c 的修改时间 touch hello.c # 3. 再次 make make # 输出gcc hello.c -o hello 它发现 hello.c 比 hello 新于是重新编译了实战 4加入伪目标clean重新编辑Makefilevim Makefile改成这样注意rm前面依然是Tabhello: hello.c gcc hello.c -o hello .PHONY: clean clean: rm -f hello保存退出后测试一下make clean # 会执行 rm -f hello把程序删掉 ls # 发现 hello 没了实战 5Makefile 进阶语法变量前面的代码写死了hello.c如果有多个文件每次改 Makefile 太麻烦。我们用变量优化这部分面试提到会加分# 定义变量 BIN hello SRC hello.c $(BIN): $(SRC) gcc $(SRC) -o $(BIN) .PHONY: clean clean: rm -f $(BIN)(注意Makefile 里的变量赋值和引用跟 Shell 脚本略有不同直接写变量名 值引用用$(变量名))

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑