GNU Make 使用手册(中译版)

更新时间:2023-10-26 11:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

GNU Make 使用手册(中译版)

翻译:于凤昌

译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级的Makefile文件。目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件,因此本人认真阅读了GNU Make 使用手册(3.79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采用GCC编写程序但对缺乏GNU Make全面了解之人士的需要。本人是业余爱好不是专业翻译人士,如果有问题请通过电子信箱与我联系共同商讨,本人的E-mail为:yfc70@public2.lyptt.ha.cn 。注意在文章中出现的斜体加粗字表示章节。

GNU make Version 3.79

April 2000

Richard M. Stallman and Roland McGrath

目录

1 Make 概述 ..................................................................................................................................... 5

1.1怎样阅读本手册 ................................................................................................................ 5 1.2问题和BUG ......................................................................................................................... 5 2 Makefile文件介绍 ...................................................................................................................... 6

2.1 规则的格式 ....................................................................................................................... 6 2.2一个简单的Makefile文件 .............................................................................................. 6 2.3 make处理makefile文件的过程 .................................................................................... 7 2.4使用变量简化makefile文件 .......................................................................................... 8 2.5 让make推断命令 ............................................................................................................. 9 2.6 另一种风格的makefile文件 ......................................................................................... 9 2.7 在目录中删除文件的规则 ............................................................................................. 10 3 编写makefile文件 ................................................................................................................... 10

3.1 makefile文件的内容 .................................................................................................... 10 3.2 makfile文件的命名 ...................................................................................................... 11 3.3 包含其它的makefile文件 ........................................................................................... 11 3.4 变量MAKEFILES .............................................................................................................. 12 3.5 makefile文件重新生成的过程 .................................................................................... 12 3.6 重载其它makefile文件 ............................................................................................... 13 3.7 make读取makefile文件的过程 .................................................................................. 14 4编写规则...................................................................................................................................... 14

4.1规则的语法 ...................................................................................................................... 15 4.2 在文件名中使用通配符 ................................................................................................. 15 4.3在目录中搜寻依赖 .......................................................................................................... 17 4.4假想目标 .......................................................................................................................... 20 4.5 没有命令或依赖的规则 ................................................................................................. 21 4.6使用空目标文件记录事件 .............................................................................................. 22 4.7 内建的特殊目标名 ......................................................................................................... 22 4.8 具有多个目标的规则 ..................................................................................................... 23 4.9 具有多条规则的目标 ..................................................................................................... 24 4.10 静态格式规则 ............................................................................................................... 24 4.11双冒号规则 .................................................................................................................... 25 4.12 自动生成依赖 ............................................................................................................... 26 5在规则中使用命令 ...................................................................................................................... 27

5.1 命令回显 ......................................................................................................................... 27 5.2执行命令 .......................................................................................................................... 28 5.3 并行执行 ......................................................................................................................... 29 5.4命令错误 .......................................................................................................................... 29 5.5中断或关闭make ............................................................................................................. 30 5.6递归调用make ................................................................................................................. 30

5.7定义固定次序命令 .......................................................................................................... 34 5.8 使用空命令 ..................................................................................................................... 35 6 使用变量..................................................................................................................................... 35

6.1 变量引用基础 ................................................................................................................. 35 6.2 变量的两个特色 ............................................................................................................. 36 6.3变量引用高级技术 .......................................................................................................... 37 6.4变量取值 .......................................................................................................................... 40 6.5设置变量 .......................................................................................................................... 40 6.6 为变量值追加文本 ......................................................................................................... 41 6.7 override指令 ................................................................................................................ 42 6.8定义多行变量 .................................................................................................................. 42 6.9 环境变量 ......................................................................................................................... 43 6.10 特定目标变量的值 ....................................................................................................... 43 6.11 特定格式变量的值 ....................................................................................................... 44 7 makefile文件的条件语句 ........................................................................................................ 44

7.1条件语句的例子 .............................................................................................................. 44 7.2条件语句的语法 .............................................................................................................. 45 7.3测试标志的条件语句 ...................................................................................................... 47 8 文本转换函数 ............................................................................................................................. 47

8.1函数调用语法 .................................................................................................................. 47 8.2字符串替换和分析函数 .................................................................................................. 48 8.3文件名函数 ...................................................................................................................... 50 8.4函数foreach ................................................................................................................... 51 8.5函数if ............................................................................................................................. 52 8.6函数call ......................................................................................................................... 52 8.7函数origin ..................................................................................................................... 53 8.8 函数shell ...................................................................................................................... 54 8.9 控制make的函数 ........................................................................................................... 54 9 运行make .................................................................................................................................... 55

9.1 指定makefile文件的参数 ........................................................................................... 55 9.2指定最终目标的参数 ...................................................................................................... 55 9.3 代替执行命令 ................................................................................................................. 57 9.4避免重新编译文件 .......................................................................................................... 57 9.5变量重载 .......................................................................................................................... 58 9.6 测试编译程序 ................................................................................................................. 58 9.7 选项概要 ......................................................................................................................... 59 10 使用隐含规则 ........................................................................................................................... 61

10.1 使用隐含规则 ............................................................................................................... 62 10.2隐含规则目录 ................................................................................................................ 62 10.3隐含规则使用的变量 .................................................................................................... 65 10.4 隐含规则链 ................................................................................................................... 66 10.5定义与重新定义格式规则 ............................................................................................ 67 10.6 定义最新类型的缺省规则 ........................................................................................... 71 10.7 过时的后缀规则 ........................................................................................................... 72

10.8隐含规则搜寻算法 ........................................................................................................ 73 11使用make更新档案文件 .......................................................................................................... 74

11.1档案成员目标 ................................................................................................................ 74 11.2 档案成员目标的隐含规则 ........................................................................................... 74 11.3 使用档案的危险 ........................................................................................................... 75 11.4 档案文件的后缀规则 ................................................................................................... 76 12 GNU make的特点 ...................................................................................................................... 76 13 不兼容性和失去的特点 ........................................................................................................... 78 14 makefile文件惯例 .................................................................................................................. 79

14.1 makefile文件的通用惯例 .......................................................................................... 79 14.2 makefile文件的工具 .................................................................................................. 80 14.3 指定命令的变量 ........................................................................................................... 80 14.4安装路径变量 ................................................................................................................ 81 14.5用户标准目标 ................................................................................................................ 84 14.6 安装命令分类 ............................................................................................................... 87 15 快速参考 ................................................................................................................................... 89 16 make产生的错误 ...................................................................................................................... 92 17 复杂的makfile文件例子 ....................................................................................................... 94 脚注 ................................................................................................................................................ 98 名词翻译对照表 ............................................................................................................................. 98

1 Make 概述

Make 可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。本版本GNU Make使用手册由Richard M. Stallman and Roland McGrath编著,是从Paul D. Smith撰写的V3.76版本发展过来的。

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

因为C语言程序更具有代表性,所以我们的例子基于C语言程序,但Make并不是仅仅能够处理C语言程序,它可以处理那些编译器能够在Shell命令下运行的的各种语言的程序。事实上,GNU Make不仅仅限于程序,它可以适用于任何如果一些文件变化导致另外一些文件必须更新的任务。

如果要使用Make,必须先写一个称为Makefile的文件,该文件描述程序中各个文件之间的相互关系,并且提供每一个文件的更新命令。在一个程序中,可执行程序文件的更新依靠OBJ文件,而OBJ文件是由源文件编译得来的。

一旦合适的Makefile文件存在,每次更改一些源文件,在shell命令下简单的键入: make

就能执行所有的必要的重新编译任务。Make程序根据Makefile文件中的数据和每个文件更改的时间戳决定哪些文件需要更新。对于这些需要更新的文件,Make基于Makefile文件发布命令进行更新,进行更新的方式由提供的命令行参数控制。具体操作请看运行Make章节。

1.1怎样阅读本手册

如果您现在对Make一无所知或者您仅需要了解对make 的普通性介绍,请查阅前几章内容,略过后面的章节。前几章节是普通介绍性内容,后面的章节是具体的专业、技术内容。

如果您对其它Make程序十分熟悉,请参阅GNU Make的特点和不兼容性和失去的特点部分,GNU Make的特点这一章列出了GNU Make对make程序的扩展,不兼容和失去的特点一章解释了其它Make程序有的特征而GNU Make缺乏的原因。

对于快速浏览者,请参阅选项概要、快速参考和内建的特殊目标名部分。

1.2问题和BUG

如果您有关于GNU Make的问题或者您认为您发现了一个BUG,请向开发者报告;我们不能许诺我们能干什么,但我们会尽力修正它。在报告BUG之前,请确定您是否真正发现了BUG,仔细研究文档后确认它是否真的按您的指令运行。如果文档不能清楚的告诉您怎么做,也要报告它,这是文档的一个BUG。

在您报告或者自己亲自修正BUG之前,请把它分离出来,即在使问题暴露的前提下尽可能的缩小Makefile文件。然后把这个Makefile文件和Make给出的精确结果发给我们。同时请说明您希望得到什么,这可以帮助我们确定问题是否出在文档上。

一旦您找到一个精确的问题,请给我们发E-mail,我们的E-mail地址是: bug-make@gnu.org

在邮件中请包含您使用的GNU Make的版本号。您可以利用命令‘make--version’得到版本号。同时希望您提供您的机器型号和操作系统类型,如有可能的话,希望同时提供config.h文件(该文件有配置过程产生)。

本文来源:https://www.bwwdw.com/article/uyk2.html

Top