GNUMake使⽤⼿册(中译版)
如果要全⾯了解Linux的结构、理解Linux的编程总体设计及思想必须⾸先全部读通Linux源代码中各级的Makefile⽂件。⽬前,在⽹上虽然有⼀些著作,但都不能全⾯的解释Linux源代码中各级的Makefile⽂件,GNU Make对全⾯了解Linux内核的Makefile有重要意义
及于凤昌译者
GNU Make 使⽤⼿册(中译版)
GNU make Version 3.79
April 2000
Richard M. Stallman and Roland McGrath
⽬录
1 make概述
1.1 怎样阅读本⼿册
1.2 问题和BUG
2 Makefile⽂件介绍
2.1 规则的格式
2.2⼀个简单的Makefile⽂件
2.3make处理Makefile⽂件的过程
2.4使⽤变量简化Makefile⽂件
2.5让make推断命令
2.6另⼀种风格的Makefile⽂件
2.7在⽬录中删除⽂件的规则
3 编写Makefile⽂件
3.1Makefile⽂件的内容
3.2Makefile⽂件的命名
3.3包含其它的Makefile⽂件
3.4变量MAKEFILES
3.5Makefile⽂件重新⽣成的过程
3.6重载其它Makefile⽂件
3.7make读取Makefile⽂件的过程
4 编写规则
4.1规则的语法
4.2在⽂件名中使⽤通配符
4.2.1通配符例⼦
4.2.2使⽤通配符的常见错误
4.2.3函数wildcard
4.3在⽬录中搜寻依赖
4.3.1VPATH:所有依赖的搜寻路径
4.3.2vpath指令
4.3.3⽬录搜寻过程
4.3.4编写搜寻⽬录的shell命令
4.3.5⽬录搜寻和隐含规则
4.3.6连接库的搜寻⽬录
4.4假想⽬标
4.5没有命令或依赖的规则
4.6使⽤空⽬录⽂件记录事件
4.7内建的特殊⽬标名
4.8具有多个⽬标的规则
4.9具有多条规则的⽬标
4.10静态格式规则
4.10.1静态格式规则的语法
4.10.2静态格式规则和隐含规则
4.11双冒号规则
4.12⾃动⽣成依赖
5 在规则中使⽤命令
5.1命令回显
5.2执⾏命令
gnu编译器
5.3并⾏执⾏
5.4命令错误
5.5中断或关闭make
5.6递归调⽤make
5.6.1变量MAKE的⼯作⽅式
5.6.2与⼦make通讯的变量
5.6.3与⼦make通讯的选项
5.6.4`--print-directory'选项
5.7定义固定次序命令
5.8使⽤空命令
6 使⽤变量
6.1变量引⽤基础
6.2变量的两个特⾊
6.3变量⾼级引⽤技术
6.3.1替换引⽤
6.3.2嵌套变量引⽤
6.4变量取值
6.5设置变量
6.6为变量值追加⽂本
6.7override指令
6.8定义多⾏变量
6.9环境变量
6.10特定⽬标变量的值
6.11特定格式变量的值
7 Makefile⽂件的条件语句
7.1条件语句的例⼦
7.2条件语句的语法
7.3测试标志的条件语句
8 ⽂本转换函数
8.1函数调⽤语法
8.2字符串替换和分析函数
8.3⽂件名函数
8.4函数foreach
8.5函数if
8.6函数call
8.7函数origin
8.8函数shell
8.9控制Make的函数
9 运⾏make
9.1指定Makefile⽂件的参数
9.2指定最终⽬标的参数
9.3代替执⾏命令
9.4避免重新编译⽂件
9.5变量重载
9.6测试编译程序
9.7选项概要
10 使⽤隐含规则
10.1使⽤隐含规则
10.2隐含规则⽬录
10.3隐含规则使⽤的变量
10.4隐含规则链
10.5定义与重新定义格式规则
10.5.1格式规则简介
10.5.2格式规则的例⼦
10.5.3⾃动变量
10.5.4格式匹配
10.5.5万⽤规则
10.5.6删除隐含规则
10.6定义最新类型的缺省规则
10.7过时的后缀规则
10.8隐含规则搜寻算法
11 使⽤make更新档案⽂件
11.1档案成员⽬标
11.2档案成员⽬标的隐含规则
11.2.1更新档案成员的符号索引表
11.3使⽤档案的危险
11.4档案⽂件的后缀规则
12 GNU make的特点
13 不兼容性和失去的特点
14 Makefile⽂件惯例
14.1makefile⽂件的通⽤惯例
14.2makefile⽂件的⼯具
14.3指定命令的变量
14.4安装路径变量
14.5⽤户标准⽬标
14.6安装命令分类
15快速参考
16make产⽣的错误
17复杂的Makefile⽂件例⼦
附录 名词翻译对照表
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地址是:
在邮件中请包含您使⽤的GNU Make的版本号。您可以利⽤命令‘make--version’得到版本号。同时希望您提供您的机器型号和操作系统类型,如有可能的话,希望同时提供config.h⽂件(该⽂件有配置过程产⽣)。
2 Makefile⽂件介绍
Make程序需要⼀个所谓的Makefile⽂件来告诉它⼲什么。在⼤多数情况下,Makefile⽂件告诉Make怎样编译和连接成⼀个程序。
本章我们将讨论⼀个简单的Makefile⽂件,该⽂件描述怎样将8个C源程序⽂件和3个头⽂件编译和连接成为⼀个⽂本编辑器。Makefile⽂件可以同时告诉Make怎样运⾏所需要的杂乱⽆章的命令(例如,清除操作时删除特定的⽂件)。如果要看更详细、复杂的Makefile⽂件例⼦,请参阅复杂的Makefile⽂件例⼦⼀章。
当Make重新编译这个编辑器时,所有改动的C语⾔源⽂件必须重新编译。如果⼀个头⽂件改变,每⼀个包含该头⽂件的C语⾔源⽂件必须重新编译,这样才能保证⽣成的编辑器是所有源⽂件更新后的编辑器。每⼀个C语⾔源⽂件编译后产⽣⼀个对应的OBJ⽂件,如果⼀个源⽂件重新编译,所有的OBJ⽂件⽆论是刚刚编译得到的或原来编译得到的必须从新连接,形成⼀个新的可执⾏⽂件。
2.1 规则的格式
⼀个简单的Makefile⽂件包含⼀系列的“规则”,其样式如下:
⽬标(target)…: 依赖(prerequiries)…
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论