GNU make/概述

维基教科书,自由的教学读本

手冊目录

make概述[编辑]

make工具能自动判断一个大程序的哪些部分需要再编译,并且能用命令来执行再编译操作。本文档讨论的GNU make原来是由司徒文与麦家府开发制作的,从3.76版开始由史密斯接管开发工作。

GNU make遵从IEEE 1003.2-1992标准(POSIX.2)第6.2条。

在本文例子中,笔者用的是C语言程序,这是因为C语言最为流行,但读者也可以用make来完成其他编程语言的编译工作,前提是这种语言的编译器能在 shell下运行。当然,make的应用不局限于程序;如果遇到一些任务,这些任务的文件必须随着其他文件或数据的变化而更新,那么读者就可以用make 来应对这些任务。

在使用make之前,请读者先写好Makefile文件,该文件须描述清楚程序文件之间的关系,还要给出更新每个文件的命令。通常,一个程序的可执行文件由OBJ文件来更新,而这些OBJ文件则由源代码编译产生。

只要有合适的Makefile文件,在修改了一些源代码后,只要在Shell命令行下输入:

make

就足以完成所有必要的再编译。make程序通过Makefile的数据库以及诸文件的最后修改时间来判断哪些文件需要更新。对于每个需要更新的文件, make会用数据库中记录的命令来对其操作。

读者可以给make加上命令行参数,以此告诉make哪些文件需要再编译、怎样再编译。参见第九章如何运行make

如何使用本文档[编辑]

如果读者是个make新手,或者想阅读大体介绍,那么在阅读每章时只需少量的看前几节,后面几节可以略过。每章的前几节会有该章介绍以及该章的大体信息,而后几节则会包括一些特殊的或技术性的信息。但第二章 make简介是个例外,全章都是介绍性的内容。

如果读者对其他make程序比较熟悉的话,请参阅第十二章 GNU make的特色功能,该章列出了GNU make的增强功能;另外请参阅第十三章 GNU make与标准make不兼容的部分,该章举出GNU make在少数功能上逊色于其他make的例子。

如果需要阅读摘要,请看第九章第七节 选项摘要附录 A 快速参考以及第四章第八节所讲的特殊目标

问题与漏洞[编辑]

如果读者发现了GNU make的一些问题或者认为发现了漏洞,那么请与开发者联系;我们不作任何承诺,但我们会尽力解决问题。

在提交漏洞报告之前,请核实漏洞的真实性。另外请认真反复阅读文档,确定文档介绍的应用方法在实际操作中有效,如果文档对功能上的一些问题没有阐述清楚,那么也请提交报告,这些都是文档的“漏洞”!

在提交漏洞报告或者自己解决漏洞之前,请将Makefile文件简化至最小且能体现漏洞问题的程度。然后把Makefile文件连同出错和警告信息一齐发给我们。请勿改动原信息,最好将其剪切复制到漏洞报告中。请确保用以生成最简Makefile文件的命令中不使用非自由软件或者不常用的程序(其实对于这种工具,读者随时都可以用简单的几句Shell命令来测试)。最后,请详述Makefile本应有的预期结果,以便于我们判断问题是否出在文档上。

如果读者发现了一个如假包换的错误,那么可以通过以下两种途径提交报告:一、通过发送电子邮件到:

bug-make@gnu.org

与我们联系;
二、使用我们的在线项目管理来提交报告,网址是:

http://savannah.gnu.org/projects/make/


除了上述的信息以外,请将使用的make完整的版本号一并发给我们;读者可以通过使用命令“make --version”来获取版本信息。请确保报告中包含make所运行机器的硬件信息与操作系统信息;顺便提一句,获取这些信息的一种方法是使用命令 “make --help”,一切尽在命令的最后一行输出中。