Makefile 教程
序
前言
Makefile 是用于自动化编译和构建项目的工具。Makefile 主要用于 C/C++文件的编译场景中。它将构建项目的规则写入一个或多个名为 makefile 或 Makefile 的文件中,然后通过 make 命令就可以调用这些规则来构建项目。
Makefile 是 UNIX/Linux 系统中用于自动化构建项目或编译和安装 开源项目的常用工具。
我们有如下的 C 语言的源代码程序,现在需要将其编译链接成为一个应用程序 myapp。
源码文件如下
myapp/
├── file1.c
├── file2.c
└── main.c
我们手动编译上述程序需要将 file1.c、file2.c 和 main.c 生成目标文件 file1.o、file2.o 和 main.o,然后再将 三个 .o 文件链接成一个应用程序 myapp
如下步骤:
weimingze@mzstudio:~/myapp$ ls
file1.c file1.h file2.c file2.h main.c
weimingze@mzstudio:~/myapp$ gcc -c file1.c
weimingze@mzstudio:~/myapp$ gcc -c file2.c
weimingze@mzstudio:~/myapp$ gcc -c main.c
weimingze@mzstudio:~/myapp$ gcc -o myapp main.o file1.c file2.c
weimingze@mzstudio:~/myapp$ ls
file1.c file1.h file1.o file2.c file2.h file2.o main.c main.o myapp
注:
weimingze@mzstudio:~/myapp$是我的终端的命令行提示符。如果你的环境中没有
gcc这个命令,请用如下命令安装。1、在 Ubuntu Linux 下可以使用
sudo apt install gcc安装。2、在 CentOS Linux 下可以使用
sudo yum install gcc安装。3、在 Mac OS 下可以使用
brew install gcc安装。
上述文件编译的过程是这样的
+---------+ +---------+
| file1.c | --> | file1.o | -->.
+---------+ +---------+ |
|
+---------+ +---------+ | +-------+
| file2.c | --> | file2.o | ---+-------> | myapp |
+---------+ +---------+ | +-------+
|
+---------+ +---------+ |
| main.c | --> | main.o | -->`
+---------+ +---------+
可见手动编译和链接这些文件比较麻烦。如果文件超过几百个,那么编译的工作量将是巨大的。解决这个问题的办法是使用 Makefile。
Makefile 常用于如下场景:
- C/C++ 语言编译和链接。
- Go 语言管理和构建。
- Qt 应用程序的构建。
- Linux 内核编译。
本课程将用最简单的方式,逐步深入的学习 Makefile 的用法。