GNU Make是Unix和类Unix系统中的一个自动化构建工具,它的作用是通过读取Makefile文件中的指令来实现自动化的编译过程。Makefile文件中包含了一系列规则来指定编译目标、依赖关系以及用于编译的命令。GUN Make的最新稳定版本是3.81,本手册将围绕这个版本进行介绍。
在Makefile的内容部分,我们首先需要了解Makefile文件的命名规则。通常,Makefile的文件名是Makefile或makefile。Makefile的命名非常重要,因为make命令默认会寻找这两个文件名中的一个来执行。
包含其它Makefile文件可以通过include语句实现,当Makefile文件较大或者有多个项目需要共享某些规则时,这种方式非常有用。变量MAKEFILES用于指定额外的Makefile文件,而变量MAKEFILE_LIST则记录了当前已经加载的Makefile文件列表。
变量的设置对于Makefile来说非常重要,make提供了两种变量定义方式,分别是递归展开式变量和直接展开式变量。递归展开式变量会保存其展开的形式,而直接展开式变量在读取时就进行展开。此外,Makefile中的变量还可以追加值,使用override指示符可以防止make命令行中的变量值覆盖Makefile中的变量值。
在Makefile规则部分,规则由目标(target)、依赖(dependencies)和命令(commands)组成。依赖可以是文件也可以是规则。Makefile的语法支持使用通配符来匹配文件名,但需要注意通配符的缺陷,比如使用VPATH变量进行一般搜索和使用vpath关键字进行选择性搜索。静态模式规则是一种特殊的规则语法,它允许你使用一个规则来匹配多个目标。
规则的命令部分介绍了如何在Makefile中书写命令。命令可以回显,也可以并发执行。命令的执行方式涉及到make命令行选项,例如-w选项可以用于调试,显示命令执行前后的工作目录。make的递归执行涉及到变量MAKE,它可以在Makefile内部调用另一个Makefile。make的内嵌函数,包括文本处理函数,为Makefile提供了强大的文本处理能力。
Makefile中的变量使用部分详细介绍了如何在Makefile中引用和定义变量。变量的引用包括简单的引用和高级用法,比如变量的替换引用和套嵌引用。make还提供了多行定义和系统环境变量的引入方式。
条件执行部分介绍了Makefile中的条件判断语法。条件判断允许根据系统的配置或者其他变量来决定执行特定的规则。Makefile的条件判断可以使用标记测试的条件语句。
Makefile的内嵌函数部分提供了Makefile中可以使用的函数。这些函数包括文本处理函数,如subst, patsubst, strip, findstring等,它们可以对文本进行查找、替换、排序等操作。
整个手册内容丰富,涵盖了Makefile的方方面面,包括Makefile的基础知识、变量和规则的使用、条件判断以及内嵌函数等。通过阅读这份手册,可以深刻理解Makefile的工作原理和编写方法,大大提升工作效率和自动化构建的能力。
1