Make 一般是在 Unix 环境下使用的自动化编译工具。他本身不是编译器,而是将众多 C/C++源文件组织起来,确定其编译方式和编译顺序的工具。一旦我们写好的 Makefile 配置文件,那么无论多么复杂的工程我们都可以用一条 make 命令来解决。事实上,尽管通常和 C/C++搭配起来使用,make 也能应用到其他的编程语言之中。
在使用 make 过程中的第一个核心问题是处理文件依赖的问题。例如:
1 | foo.o : foo.c defs.h # foo模块 |
这里 foo.o
依赖于 foo.c
和 defs.h
。当后面两个文件发生变化时,make 会自动运行 cc -c -g foo.c
命令更新 foo.o
文件。但是,随着项目扩大。这种文件之间的依赖关系会变得非常复杂,一个小的改动可能会涉及到众多依赖关系的修改。因此有必要在项目的开始就引入自动构建依赖关系的工具链。