博主学习并翻译了GNU make的官方手册,去掉了一些没用的信息。如果是初学者的话,看前面几章完全足够了。
第一章 make概述
make命令可以自动确定在一个大型程序项目中哪些源文件需要被重新编译,并且执行相应的编译命令。这部手册解释了GNU make命令的用法,make是由Richard Stallman 和 Roland McGrath 共同开发的,在3.76版本以后由Paul D. Smith 维护。
我们通过C语言程序来举例,因为这是最常见的,但是你可以使用make来编译任何编程语言编写的程序,只要它所对应的编译器能够通过shell脚本来执行。实际上,make命令不仅可以用于编程领域,你可以用它描述任何需要自动更新文件、处理文件之间依赖关系的任务。
要使用make命令,你必须编写一个Makefile文件,这个文件中描述了你的程序文件之间的依赖关系,还要提供编译每个文件的命令。一般来说在一个程序中,可执行文件要依赖于目标文件(*.o文件),而目标文件又是由源文件编译得到的。
一旦编写好了Makefile,每次修改源文件之后,仅需执行make
命令,make
会帮你自动执行必要的重编译过程。make
命令通过你编写的Makefile以及文件的最后修改时间来确定哪些文件需要更新。对于每一个需要更新的文件,会执行Makefile中相应的shell脚本。
你可以为make提供命令行参数来控制应该重新编译哪些文件或如何重新编译。参见第9章[如何运行make]。
第二章 Makefile介绍
你需要编写名为Makefile的文件来告诉make命令需要做什么。一般来说Makefile应该告诉make
命令如何编译和链接一个程序。
在这一章中,我们讨论一个简单的Makefile,它描述了怎样编译和链接有8个C语言源文件和3个头文件的项目,这个小项目实现了“文本编辑器”的功能。在Makefile中还告诉make命令如何执行一些特定的工作(比如说清理工程的操作,可以移除一些特定的文件)。
当make
命令重新编译这个项目时,每一个被修改过的C源文件都需要重新编译,如果有头文件被修改了,那么每一个包含该头文件的C源文件需要被重新编译,每一个编译过程都会产生目标文件(object file)。最后,只要有一个C源文件被修改了,那么所有的目标文件(包括之前编译的和这一次重新编译的)都需要重新链接在一起从而生成一个新的可执行文件。