

**前引:**在 Linux 开发与运维场景中,当我们面对包含数十个甚至上百个源文件的项目时,手动输入 gcc 编译命令不仅繁琐易错,更会因文件依赖关系混乱导致编译效率极低。修改一个核心头文件后,如何快速定位并重新编译所有关联的源文件?如何统一管理编译选项、输出路径与清理操作?make 指令与 Makefile 文件正是解决这些问题的利器!
【一】make 与 Makefile 介绍
首先我们需要知道:make属于命令,Makefile(Makefile 也可以)属于文件。二者配套使用。
make是一个命令行工具,本质是一个'构建引擎'。它的核心功能是:根据预先定义的'规则',自动判断项目中哪些文件需要重新编译,并执行相应的编译命令,最终生成可执行程序或目标文件。
Makefile是一个文本文件(通常命名为Makefile或makefile),它是make工具的'操作手册'。
简而言之:通过执行make命令来调用Makefile文件,而过程的实现放在Makefile文件里面!
【二】Makefile 文件的编写
(1)语法
在学习编写之前,我们需要学习依赖关系和依赖方法的概念:
- **依赖关系:**完成某个目标涉及到的对象(例如你想要生活费,那么你应该找你爸)
- **依赖方法:**完成这个目标需要的方法实现(例如你需要各种理由向你爸开口打钱给你)
首先我们打开创建的 makefile 文件,编写格式解读如下:

首先是目标文件:目标文件代表整个过程输出的可执行程序(例如编译之后需要产生 Hello 文件)。
依赖关系文件:代表生成可执行程序需要涉及到的文件(例如这里是源文件)。
依赖方法:代表方法的实现(例如这里采用 gcc 编译)。**注:**依赖方法前面是 tab 键,不是四个空格。
clean:代表自动清理,不需要依赖任何关系文件。
(2)注意
- clean 需要放在执行中间过程的后面,因为 Makefile 的执行是从顶到下的。
- 依赖方法的实现是根据执行关系执行的,例如可以把各个编译过程逐个进行。
- 如果我们 make 或者 make clean 了一次之后执行第二次、第三次……会出现无法执行的问题:

















