语言: 日本語 | Español | Français | Português | 中文 | English
上一章 | 下一章 | 目录 | 英文原版(gnu.org)

1 make 概述

make 工具能自动判断一个大型程序中哪些部分需要重新编译,并发出相应的命令来完成重新编译。本手册介绍的是它的 GNU 版本,即 GNU make。GNU make 由 Richard Stallman 和 Roland McGrath 实现,自 3.76 版起由 Paul D. Smith 接手开发。

GNU make 符合 IEEE Standard 1003.2-1992(POSIX.2)第 6.2 节的规定。

本书的示例采用 C 语言程序,因为它最为常见。不过 make 适用于任何编译器能通过 shell 命令启动的编程语言。其实,make 并不限于程序。只要某些文件需要在另一些文件发生变化时随之自动更新,这类任务都可以用它来描述。

准备并运行 make

为了使用 make,你必须编写一个名为 makefile 的文件。它描述了程序中各文件之间的关系,并提供更新每个文件的命令。在一个典型的程序中,可执行文件由目标文件(object)生成,而目标文件又通过编译源文件得到。

只要有了合适的 makefile,每次修改源文件后,只需输入下面这条简单的 shell 命令:

make

这样就能完成所有必要的重新编译。make 程序根据 makefile 这个数据库以及各文件的最后修改时间,来判断哪些文件需要更新。对于每个需要更新的文件,它会发出数据库中记录的命令 (recipe)。

你可以向 make 传递命令行参数,以控制哪些文件需要重新编译以及如何编译。参见如何运行 make一章。

1.1 如何阅读本手册

如果你初次接触 make,或只想了解大致情况,可以只阅读每一章开头的几节,跳过后面的章节。每一章中,开头几节是入门性或概括性的内容,越往后越是专门的、技术性的内容。第 2 章「Makefile 入门」是个例外,它整章都是入门内容。

如果你熟悉其他 make 程序,请先查看GNU make 的特性一章,其中列出了 GNU make 所具备的扩展功能。此外,不兼容之处与未实现的功能一章说明了其他 make 具备而 GNU make 缺少的少数几点。

如果想快速了解要点,请参阅选项一览、快速参考,以及特殊的内置目标名一节。

1.2 问题与 bug

如果你在使用 GNU make 时遇到问题,或认为发现了 bug,请向开发者报告。我们不能保证一定会处理,但只要可行就很愿意修复。

在报告 bug 之前,请先确认它确实是一个 bug。仔细重读文档,看看其中是否真的写明你想做的事是可以做到的。如果不清楚某件事到底该不该能做到,也请一并报告,因为那属于文档的 bug!

在报告 bug 或自己动手修复之前,请尝试把问题精简到能够重现它的尽可能小的 makefile。然后把这个 makefile 以及 make 实际输出的准确结果(包括任何错误或警告消息)发给我们。请不要转述这些消息,最好直接把它们剪切粘贴到报告中。在编写这个小 makefile 时,请注意不要在命令 (recipe) 中使用任何非自由的或不常见的工具:这类工具的行为几乎总能用简单的 shell 命令来模拟。最后,请务必说明你期望发生的结果,这有助于我们判断问题是否真的出在文档上。

一旦你能准确地描述问题,就可以通过以下两种方式之一来报告。可以发送电子邮件到:

bug-make@gnu.org

或者使用我们基于 Web 的项目管理工具:

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

除了上述信息之外,请务必附上你所使用的 make 的版本号。版本号可以用 make --version 这条命令查看。另外,别忘了写明你所使用的机器类型和操作系统。这些信息也可以通过查看 make --help 输出的末尾几行得到。

如果你想提交代码改动,请参阅 README 文件中「Submitting Patches」一节的说明。

(译注: 上述联系方式直接指向原文的官方(GNU)。报告 bug 时最好用英语书写,请不要把译文本身的错误报告给 GNU。关于译文的意见请联系 ecoop.net。)


上一章 | 下一章 | 目录 | 英文原版(gnu.org)