字体: | 推荐给好友 上一篇 | 下一篇

GNU make中文手册 - 第十二章 : GNU make的特点

发布: 2009-2-09 22:01 | 作者: webmaster | 来源: 本站原创 | 查看: 277次

第十二章GNU make的特点


截至本章为止,所有关于GNU make使用的讨论全部结束。相信大家也能够独立、熟练的书写Makefile,并能够使用GNUmake来管理自己的工程。

本章是GNU make特点的总结。主要是和其它版本make得比较。这些特征都是以4.2 BSD中的make的为基准。当需要书写可移植到不同的类UNIX系统上的Makefile时,应避免使用GNU版本make自身的一些特征。

12.1     源自System v的特点

下面所罗列的这些是来自System V版本make的一些特点:

Ø       变量“VPATH”及它的含义(参考4.5目录搜索一节)。System V版本的make支持,但没有得到验证。4.3 BSDmake支持(据说是对System Vmake这一功能的仿照)。

Ø       可包含其它makefile文件(参考3.3包含其它makefile文件一节)。使用指示符“include”可同时包含多个文件是GNU的扩展。

Ø       可使用系统环境变量。参考6.9系统环境变量一节

Ø       变量“MAKEFLAGS”。用于make递归调用时传递命令行选项。参考5.6 make的递归调用一节

Ø       make静态库(文档文件)是“$%”可代表静态库成员名。参考10.5.3自动化变量一节

Ø       对自动变量“$@”、“$*”、“$<”、“$%”和“$?”进行了扩展,支持“$(@F)”和“$(@D)”等形式的自动环变量。并以此对自动变量“$^”进行了扩展。参考10.5.3自动化变量一节

Ø       变量引用。参考6.1变量的引用一节

Ø       支持使用命令行选项“-b”和“-m”来兼容其它版本的makeSystem Vmake中,这些选项有实际含义。

Ø       使用变量“MAKE”执行的递归调用。可支持“-n”、“-q”和“-t”向子make进程的传递。参考 5.6 make的递归调用一节

Ø       支持后缀“.a”(参考11.4静态库的后缀规则一节)。不过这个特点在GNU make的新版本中已经被模式规则所取代。

Ø       保持Makefile规则命令行的书写格式,只是去掉了初始空字符。执行命令的回显保持Makefile中的书写格式不变。

12.2     源自其他版本的特点

下面的特点来自于其它版本的make,但每一个特征来自由哪个版本的make不太清楚:

Ø       模式规则使用模式字符“%”。目前在多个不同版本的make中都有使用“%”。但具体是那个版本的make提出它不甚清楚。关于模式规则参考 10.5模式规则一节

Ø       规则链以及隐含的中间过程文件。这个特点首次是在Stu Feldmanmake版本中实现,并用于AT&T第八版的Unix研究中。后来AT&T贝尔实验室的Andrew Hume在它的mk程序中应用(这里称为“传递闭合”)。但不清楚这个特征是对它们的继承还是GNU自己的重新实现。参考10.4隐含规则链一节

Ø       包含规则所有依赖文件列表的自动化变量“$^”。可以确定这不是GNU创造的,但具体是哪个版本的make创造也不清楚。参考10.5.3自动化变量一节

Ø       命令行的“what if”选项(GNU make的“-W”选项)据说是Andrew Humemk中首次提出的的。参考9.7 make的命令行选项一节

Ø       并发执行的观点,在其它多种版本的make中都有支持。但System VBSD没有实现此功能。参考5.3并发执行命令一节

Ø       变量的模式替换引用来自SunOS 4。参考6.3变量的高级用法一节。GNU make中,这个功能是在SunOS 4实现之前由函数“patsubst”提供。同一功能的两种实现,在两个版本的make中,难以确定是哪一个最早提出这个概念。

Ø       命令行之前使用“+”字符,它有特殊的含义(参考9.3替代命令的执行一节)。这种做法是由IEEE Standard 1003.2-1992 (POSIX.2)定义的。

Ø       变量值追加“+=”的语法来自于SunOS 4版本的make。参考6.6追加变量值一节

Ø       静态库成员列表作为目标的语法“ARCHIVE(MEM1 MEM2...)”源自SunOS 4 make。参考11.1库成员作为目标一节

Ø       使用“-include”包括多个其它的makefile文件,当所包含的文件不存在时不出错。这个特征源自SunOS 4版本的make。(但SunOS 4版本的make不能使用单指示符同时包含多个文件)GNU make的这个特征和SGI make的指示符“sinclude”相同。GNU make也支持“sinclude”。

12.3     GNU make自身的特点

以下特点是由GNU make本身的:

Ø       命令行选项“-v”或“--version”打印make的版本和版权信息。

Ø       使用“-h”或“--help”列出make支持的所有命令行选项。

Ø       直接展开式变量。参考6.2两种变量定义一节

Ø       变量“MAKE”支持make递归调用时命令行选项的传递。参考 5.6 make的递归调用一节

Ø       命令选项“-C”或“--directory”改变make执行的工作目录。参考9.7 make的命令行选项一节

Ø       支持多行变量的定义。参考6.8定义多行变量一节

Ø       使用特殊目标“.PHONY”声明伪目标。AT&T贝尔实验室Andrew Hume使用不同的语法在它的mk程序中也实现了该功能。两者几乎在同时支持。参考4.6 Makefile伪目标一节

Ø       支持过个文本处理函数。参考8.2文本处理函数一节

Ø       支持使用“-o”或者“--old-file”选项指定一个文件是未修改文件(告诉make不需要考虑这个文件的时间戳)。参考9.4防止特定文件重建一节

Ø       条件执行。众多其它版本的make也支持;它似乎是对c语言预处理程序和宏语言的自然扩展,不能算是一个全新的概念。参考第七章Makefile的条件判断一章

Ø       指定包含makefile文件的搜寻路径。参考3.3包含其它makefile文件一节

Ø       环境变量“MAKEFILES”指定需要默认读取的makefile文件。参考3.4变量MAKEFILES一节

Ø<

 

评分:0

我来说两句

seccode