GNU Make
第1章Make概述
Make是一个能够自动确定在大量的源文件哪些有必要重新编译,并能够自动调用编译器重编译那些源文件的工具。本手册描述的是Richard Stallman和Roland McGrath.实现的GNU Make,
V3.76之后的版本又Paul Smith负责维护。
GNU Make遵从IEEE 1003.2-1992 6.2(POSIX.2)的相关规定。
我们将以使用最为广泛的C语言为例介绍GNU Make的用法,不过GNU Make可以用于所有的其编译器能够在Shell命令下运行的编程语言。事实上,Make不仅可以用于编程,它可以胜任所有的当一些文件发生变化时另一些文件需要被自动更新的任务。
在使用Make之前,你需要准备一个被称作Makefile的文件,它描述你源文件之间的依赖关系以及更新每个文件需要调用的命令。典型情况下,一个可执行文件由多个目标文件生成(更新自目标文件),这些目标文件又是由源文件生成(更新自源文件)。
当你写好了一个Makefile之后,每次你在其所在目录下敲击make命令时,Make程序会自动完成所有必要的重新编译。Make程序通过使用Makefile和文件的最后一次修改时间来决定哪些文件需要更新。对于需要更新的每一个文件,Make都会执行记录在Makefile中的与其相对应的命令。
你可以通过向Make传送命令行参数以控制它重新编译哪些文件或者文件将以怎样的方式被重新编译。有关这一部分的内容可以参见
《第
9
章
如何运行
Make
程序》
1.1 怎样阅读这本手册
如果你是一个Make方面的新手,或者只想了解一个大概,你可以阅读本手册每章的前几节,跳过其余部分即可,在每章的前几节会介绍一些概要性的内容而其后各节将介绍一些更为专业的技术。唯独
《第
2
章
Makefiles
简介》是一个例外,其中内容全部为概要性的介绍。
如果你熟悉其他Make程序,那么可以参看
《第
12
章
GNU Make
的特性》,其中罗列了GNU Make具有哪些更好的特性,还有
《第
13
章
GNU Make
的不兼容性和缺失特性》,这一章介绍了其他Make程序具有但是GNU Make缺失的一些特性。
如果你想较快地掌握一些要领,那么可以直接参看如下章节,
《
9.7
选项概要》,《附录
A
快速参考》,《
4.8
特殊目标》。
1.2 问题和缺陷
如果你使用GNU Make过程中遇到了问题,或者你认为自己发现了GNU Make的一个缺陷,那么请把你的情况提交给GNU Make的开发者,我们不承诺能够解决所有的问题,但是我们会尽力修正它们。
在提交一个缺陷之前,请确定它确实是一个缺陷。仔细阅读文档,并确定你所做的是文档明确说明过你可以这样做的。如果文档没有明确说明你能否这样做,那么也请提交一个缺陷报告,这是文档方面的一个缺陷。
在提交一个缺陷或者你自己努力修正这个缺陷之前,请努力将问题隔离到一个尽量小的能够复现这个缺陷的Makefile之中,并把这个Makefile连同make输出给你的原始错误、警告信息发给我们。不要向我们解释你所遇到的错误、警告信息,你把它们直接剪切,粘贴到你的缺陷报告中发给我们是最好的。在你提交给我们的Makefile中,涉及的命令不要带有非免费的或者不常用的命令。最后,确保告知我们你期望得到的结果是什么,这将有助于我们确定我们的文档之中是否有这样的问题存在。
一旦你发现了一个确切的问题,你可以通过两种方式向我们提交缺陷报告。你可以发送电子邮件到:
或者通过访问我们的基于Web的管理工具:
http://savannah.gnu.org/projects/make/
除了以上提到的信息外,请将你所使用的Make版本信息认真说明。你可以通过命令
`make --version'来获得Make的版本信息。也确保将你所使用的操作系统和机器类型包含在你的报告之中,这些信息的可以通过观看`make --version'命令输出信息的最后几行来获得。