GNUmake中文手册:学习Makefile编写

需积分: 9 0 下载量 114 浏览量 更新于2024-11-24 收藏 1.29MB PDF 举报
"Makefile 中文手册" GNU Makefile是用于自动化构建、编译和测试程序的工具,它允许开发者通过编写Makefile来定义一系列的规则,这些规则描述了如何从源代码生成可执行文件或其他目标文件。Makefile的使用大大提高了软件项目的构建效率,尤其是在大型项目中,因为它可以跟踪文件之间的依赖关系,并且只重新编译那些被修改过的源文件。 **第一章:概述** 1.1 Make之前的基本知识 - 概述:在使用Makefile之前,需要了解基本的编程概念,如编译、链接以及文件依赖关系。 - 准备知识:熟悉命令行操作,理解C/C++等编程语言的编译过程,以及如何运行编译后的程序。 1.2 GNUmake介绍 - Makefile简介:Makefile是一个文本文件,包含了一系列的规则,描述了如何从源文件生成目标文件。 - Makefile规则:规则由目标、依赖项和命令组成,目标通常是需要生成的文件,依赖项是目标生成所依赖的文件,命令则是当目标文件比依赖文件旧或者依赖文件不存在时需要执行的操作。 - 简单示例:一个简单的Makefile可能包括一个规则,如`all: prog`,表示`prog`是所有目标的默认目标,`make`会尝试构建它。 - make如何工作:make首先检查目标文件和依赖文件的时间戳,如果目标较旧,就会执行对应的命令。 - 指定变量:变量可以用来存储常量和重复使用的字符串,如`CC=gcc`指定编译器为gcc。 - 自动推导规则:make内置了一些规则,可以自动推导出如何从源文件生成目标文件。 - 另类风格的makefile:除了标准格式外,还可以采用其他风格,如使用Tab键缩进规则。 **第二章:Makefile总述** 2.1 Makefile的内容:通常包括目标、依赖关系、命令、变量定义等。 2.2 makefile文件的命名:默认文件名为`Makefile`或`makefile`,也可以通过`-f`选项指定其他名字。 2.3 包含其他makefile:可以使用`include`指令引入其他Makefile,以便于模块化管理。 2.4 变量MAKEFILES:此变量可以设置为包含额外Makefile的列表。 2.5 变量MAKEFILE_LIST:包含了所有被读取的Makefile的列表。 2.6 其他特殊变量:例如,`$@`代表当前目标,`$<`代表第一个依赖项。 2.7 makefile文件的重建:如果Makefile本身需要更新,可以通过`touch`命令改变其时间戳。 2.8 重载另一个makefile:通过`-f`选项可以加载新的Makefile覆盖原有的规则。 2.9 make解析makefile:make会按照特定顺序解析规则、变量和条件语句。 **第三章:Makefile的规则** 3.1 规则语法:规则通常格式为`target: dependency... command...`。 3.2 依赖的类型:可以是具体文件,也可以是其他规则产生的目标。 3.3 文件名使用通配符:`*`和`?`可以匹配多个或单个任意字符,但可能导致某些问题,如未匹配到的文件。 3.4 函数wildcard:可以获取当前目录下匹配特定模式的所有文件名。 3.5 目录搜寻:通过VPATH变量或vpath关键字指定搜索路径,使make能处理不同目录下的文件。 3.6 Makefile伪目标:如`.PHONY`,用于标记那些实际上不是物理文件的目标,确保总是执行相应的命令。 3.7 强制目标:没有命令或依赖的规则,用于更新目标,即使目标已经存在。 3.8 空目标文件:用于收集其他目标的依赖,确保相关命令始终执行。 3.9 特殊目标:如`.SILENT`(静默模式)、`.DELETE_ON_ERROR`(错误时删除目标)等。 3.10 多目标:一个规则可以有多个目标,它们共享相同的依赖和命令。 3.11 多规则目标:一个目标可以有多个规则,每条规则有自己的命令和依赖。 3.12 静态模式:静态模式规则更灵活,可以匹配一组相关的文件,而不仅仅是单个文件。 这个手册详细地介绍了GNU Makefile的各个方面,从基本概念到高级特性,是学习和掌握Makefile编写技巧的重要参考资料。通过学习,开发者可以编写出高效、灵活的Makefile,以自动化项目的构建过程。