前言
如果你在 Linux 下编译过 C/C++ 项目,一定遇到过这样的场景:
修改一个文件后,需要手动输入 gcc main.c func.c -o app 重新编译,文件多了还容易漏写;如果只改了一个小模块,却要重新编译所有文件 —— 既浪费时间又麻烦。
而 make 工具 和 Makefile,就是为解决这个问题而生的自动化构建方案。今天我们就从基础到实战,彻底掌握它们。
一、先搞懂:make 是什么?Makefile 又是什么?
1.1 背景
- 会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
- 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
- makefile 带来的好处就是 ——'自动化编译',一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。
- make 是一个命令工具,是一个解释 makefile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可见,makefile 都成为了一种在工程方面的编译方法。
- make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。
1.2 make:Linux 下的自动化构建工具
make 是一个命令行工具,核心能力是:
- 检查文件的修改时间(对比目标文件与依赖文件)
- 只重新编译 '被修改过的依赖文件' 对应的目标
- 按预定规则(写在 Makefile 里)逐步执行构建步骤
简单说:它能帮你 '智能编译',避免重复劳动。
1.3 Makefile:make 的 '操作手册'
Makefile 是一个文本文件,没有后缀名,核心作用是定义构建规则—— 告诉 make:
- 最终要生成的目标文件(比如可执行程序**
app**) - 生成目标需要依赖哪些文件(比如**
main.o、func.o**) - 具体用什么命令生成目标(比如**
gcc -c main.c**)
没有 Makefile,make 命令就会报错(不知道该做什么)。
二、最佳实践:先见一下,如何使用
2.1 构建项目
1. 创建 Makefile 文件
touch Makefile
2. vim 编辑 Makefile
[图片:Makefile 编辑界面]
3. make
[图片:make 执行结果]
2.2 清理项目
如果要清理项目时,可能会不小心将程序搞崩溃,所以这时候就需要 Makefile 自动化清理
[图片:清理命令示例]
[图片:清理效果]


