没有合适的资源?快使用搜索试试~ 我知道了~
首页makefile(Gnumake)
makefile(Gnumake)
5星 · 超过95%的资源 需积分: 9 21 下载量 64 浏览量
更新于2023-03-03
评论
收藏 759KB DOC 举报
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文件是由源文件编译得来的。
资源详情
资源评论
资源推荐
1.1 怎样阅读本手册...................................................................................................................3
1.2 问题和 BUG..........................................................................................................................3
2.1 规则的格式...........................................................................................................................4
2.2 一个简单的 Makefile 文件...................................................................................................4
2.3 make 处理 makefile 文件的过程..........................................................................................5
2.4 使用变量简化 makefile 文件...............................................................................................6
2.5 让 make 推断命令.................................................................................................................7
2.6 另一种风格的 makefile 文件...............................................................................................7
2.7 在目录中删除文件的规则...................................................................................................7
3.1 makefile 文件的内容............................................................................................................9
3.2 makfile 文件的命名..............................................................................................................9
3.3 包含其它的 makefile 文件.................................................................................................10
3.4 变量 MAKEFILES..............................................................................................................10
3.5 makefile 文件重新生成的过程..........................................................................................11
3.6 重载其它 makefile 文件.....................................................................................................12
3.7 make 读取 makefile 文件的过程.......................................................................................12
4.1 规则的语法.........................................................................................................................14
4.2 在文件名中使用通配符.....................................................................................................14
***4.3 在目录中搜寻依赖.......................................................................................................16
4.4 假想目标.............................................................................................................................19
4.5 没有命令或依赖的规则.....................................................................................................20
4.6 使用空目标文件记录事件.................................................................................................20
4.7 内建的特殊目标名.............................................................................................................21
4.8 具有多个目标的规则.........................................................................................................22
4.9 具有多条规则的目标.........................................................................................................22
4.10 静态格式规则...................................................................................................................23
4.11 双冒号规则.......................................................................................................................24
4.12 自动生成依赖...................................................................................................................24
5.1 命令回显.............................................................................................................................26
5.2 执行命令.............................................................................................................................26
5.3 并行执行.............................................................................................................................27
5.4 命令错误.............................................................................................................................28
5.5 中断或关闭 make................................................................................................................29
5.6 递归调用 make....................................................................................................................29
5.7 定义固定次序命令.............................................................................................................32
5.8 使用空命令.........................................................................................................................33
6.1 变量引用基础.....................................................................................................................34
6.2 变量的两个特色.................................................................................................................34
6.3 变量引用高级技术.............................................................................................................36
6.4 变量取值.............................................................................................................................38
6.5 设置变量.............................................................................................................................38
6.6 为变量值追加文本.............................................................................................................39
6.7 override 指令.......................................................................................................................40
6.8 定义多行变量.....................................................................................................................40
6.9 环境变量.............................................................................................................................41
6.10 特定目标变量的值...........................................................................................................41
6.11 特定格式变量的值...........................................................................................................42
7.1 条件语句的例子.................................................................................................................43
7.2 条件语句的语法.................................................................................................................44
7.3 测试标志的条件语句.........................................................................................................45
8.1 函数调用语法.....................................................................................................................46
8.2 字符串替换和分析函数.....................................................................................................46
8.3 文件名函数.........................................................................................................................48
8.4 函数 foreach........................................................................................................................49
8.5 函数 if..................................................................................................................................50
8.6 函数 call...............................................................................................................................50
8.7 函数 origin...........................................................................................................................51
8.8 函数 shell.............................................................................................................................52
8.9 控制 make 的函数...............................................................................................................52
9.1 指定 makefile 文件的参数.................................................................................................54
9.2 指定最终目标的参数.........................................................................................................54
9.3 代替执行命令.....................................................................................................................55
9.4 避免重新编译文件.............................................................................................................56
9.5 变量重载.............................................................................................................................57
9.6 测试编译程序.....................................................................................................................57
9.7 选项概要.............................................................................................................................57
10.1 使用隐含规则...................................................................................................................61
10.2 隐含规则目录...................................................................................................................62
10.3 隐含规则使用的变量.......................................................................................................64
10.4 隐含规则链.......................................................................................................................65
10.5 定义与重新定义格式规则...............................................................................................66
10.6 定义最新类型的缺省规则...............................................................................................70
10.7 过时的后缀规则...............................................................................................................71
10.8 隐含规则搜寻算法...........................................................................................................72
11.1 档案成员目标...................................................................................................................73
11.2 档案成员目标的隐含规则...............................................................................................73
11.3 使用档案的危险...............................................................................................................74
11.4 档案文件的后缀规则.......................................................................................................74
14.1 makefile 文件的通用惯例................................................................................................79
14.2 makefile 文件的工具........................................................................................................79
14.3 指定命令的变量...............................................................................................................80
14.4 安装路径变量...................................................................................................................81
14.5 用户标准目标...................................................................................................................84
14.6 安装命令分类...................................................................................................................86
概述
可自动决定一个大程序中哪些文件需要重新编译,并发布重新编译它们的命令。
本版本 使用手册由 编
著,是从 撰写的 版本发展过来的。
符合 IEEE Standard 1003.2-1992 !"#" 章节的规定。
因为 $ 语言程序更具有代表性,所以我们的例子基于 $ 语言程序,但 并不是
仅仅能够处理 $ 语言程序,它可以处理那些编译器能够在 命令下运行的的各种语言
的程序。事实上, 不仅仅限于程序,它可以适用于任何如果一些文件变化导
致另外一些文件必须更新的任务。
如果要使用 ,必须先写一个称为 % 的文件,该文件描述程序中各个文
件之间的相互关系,并且提供每一个文件的更新命令。在一个程序中,可执行程序文件的
更新依靠 &' 文件,而 &' 文件是由源文件编译得来的。
一旦合适的 % 文件存在,每次更改一些源文件,在 ( 命令下简单的键入:
就能执行所有的必要的重新编译任务。 程序根据 % 文件中的数据和每个文
件 更 改 的 时 间 戳 决 定 哪 些 文 件 需 要 更 新 。 对 于 这 些 需 要 更 新 的 文 件 , 基于
% 文件发布命令进行更新,进行更新的方式由提供的命令行参数控制。具体操作
请看
运行
Make 章节。
怎样阅读本手册
如果您现在对 一无所知或者您仅需要了解对 的普通性介绍,请查阅前
几章内容,略过后面的章节。前几章节是普通介绍性内容,后面的章节是具体的专业、技
术内容。
如果您对其它 程序十分熟悉,请参阅 GNU Make
的特点
和
不兼容性和失去
的特点
部分,GNU Make
的特点
这一章列出了 对 程序的扩展,
不
兼容和失去的特点
一章解释了其它 程序有的特征而 缺乏的原因。
对于快速浏览者,请参阅
选项概要、快速参考
和
内建的特殊目标名
部分。
" 问题和 &
如果您有关于 的问题或者您认为您发现了一个 &,请向开发者报告;
我们不能许诺我们能干什么,但我们会尽力修正它。在报告 & 之前,请确定您是否真
正发现了 &,仔细研究文档后确认它是否真的按您的指令运行。如果文档不能清楚的
告诉您怎么做,也要报告它,这是文档的一个 &。
在您报告或者自己亲自修正 & 之前,请把它分离出来,即在使问题暴露的前提下
尽可能的缩小 % 文件。然后把这个 % 文件和 给出的精确结果发
给我们。同时请说明您希望得到什么,这可以帮助我们确定问题是否出在文档上。
一旦您找到一个精确的问题,请给我们发 )*,我们的 )* 地址是:
+,*-,,
在 邮 件 中 请 包 含 您 使 用 的 的 版 本 号 。 您 可 以 利 用 命 令 ‘ **
.(/得到版本号。同时希望您提供您的机器型号和操作系统类型,如有可能的话,希
望同时提供 %, 文件(该文件有配置过程产生)。
"% 文件介绍
程序需要 一个 所谓的 % 文 件来 告诉 它干 什么 。在 大多 数情 况下
% 文件告诉 怎样编译和连接成一个程序。
本章我们将讨论一个简单的 % 文件,该文件描述怎样将 0 个 $ 源程序文件和
个头文件编译和连接成为一个文本编辑器。% 文件可以同时告诉 怎样运
行所需要的杂乱无章的命令(例如,清除操作时删除特定的文件)。如果要看更详细、复
杂的 % 文件例子,请参阅
复杂的
Makele
文件例子
一章。
当 重新编译这个编辑器时,所有改动的 $ 语言源文件必须重新编译。如果一个
头文件改变,每一个包含该头文件的 $ 语言源文件必须重新编译,这样才能保证生成的编
辑器是所有源文件更新后的编辑器。每一个 $ 语言源文件编译后产生一个对应的 &' 文件,
如果一个源文件重新编译,所有的 &' 文件无论是刚刚编译得到的或原来编译得到的必须
从新连接,形成一个新的可执行文件。
"规则的格式
一个简单的 % 文件包含一系列的“规则”,其样式如下:
目标,#12依赖34(#1
5+6命令#
1
1
目标,#通常是要产生的文件的名称,目标的例子是可执行文件或 &' 文件。
目标也可是一个执行的动作名称,诸如‘/(详细内容请参阅
假想目标
一节)。
依赖是用来输入从而产生目标的文件,一个目标经常有几个依赖。
命令是 执行的动作,一个规则可以含有几个命令,每个命令占一行。注意:
每个命令行前面必须是一个 7+ 字符,即命令行第一个字符是 7+。这是不小心容易出错
的地方。
通常,如果一个依赖发生变化,则需要规则调用命令对相应依赖和服务进行处理从而
更新或创建目标。但是,指定命令更新目标的规则并不都需要依赖,例如,包含和目标
‘/相联系的删除命令的规则就没有依赖。
规则一般是用于解释怎样和何时重建特定文件的,这些特定文件是这个详尽规则的目
标。 需首先调用命令对依赖进行处理,进而才能创建或更新目标。当然,一个规则
也可以是用于解释怎样和何时执行一个动作,详见
编写规则
一章。
一个 % 文件可以包含规则以外的其它文本,但一个简单的 % 文件仅
仅需要包含规则。虽然真正的规则比这里展示的例子复杂,但格式却是完全一样。
"" 一个简单的 % 文件
一个简单的 % 文件,该文件描述了一个称为文本编辑器()的可执行文
件生成方法,该文件依靠 0 个 &' 文件( 文件),它们又依靠 0 个 $ 源程序文件和
个头文件。
在这个例子中,所有的 $ 语言源文件都包含‘8(/头文件,但仅仅定义编辑命令
的源文件包含‘/头文件,仅仅改变编辑器缓冲区的低层文件包含‘+9/
头文件。
2+(3:;
((%((
*+(3:;
((%((
<
28(
*
+2+8(
*+
28(
*
(3:2(3:8(+9
*(3:
(2(8(+9
*(
(2(8(+9
*(
%(2%(8(+9
*%(
(2(8(
*(
2
+(3:;
((%((
我们把每一个长行使用反斜杠*新行法分裂为两行或多行,实际上它们相当于一行,这
样做的意图仅仅是为了阅读方便。
使用 % 文件创建可执行的称为‘/的文件,键入:
使用 % 文件从目录中删除可执行文件和目标,键入:
在这个 % 文件例子中,目标包括可执行文件‘/和 &' 文件‘/及
‘+/。依赖是 $ 语言源文件和 $ 语言头文件如‘/和‘8/等。事实上,每一
个 &' 文件即是目标也是依赖。所以命令行包括‘*/和‘*+/。
当目标是一个文件时,如果它的任一个依赖发生变化,目标必须重新编译和连接。任
何命令行的第一个字符必须是‘7+/字符,这样可以把 % 文件中的命令行与其它
行分别开来。(一定要牢记: 并不知道命令是如何工作的,它仅仅能向您提供保证
目标的合适更新的命令。 的全部工作是当目标需要更新时,按照您制定的具体规则
执行命令。)
目标‘/不是一个文件,仅仅是一个动作的名称。正常情况下,在规则中‘/
这个动作并不执行,目标‘/也不需要任何依赖。一般情况下,除非特意告诉
执行‘/命令,否则‘/命令永远不会执行。注意这样的规则不需要任何依赖,它
们存在的目的仅仅是执行一些特殊的命令。象这些不需要依赖仅仅表达动作的目标称为假
想目标。详细内容参见
假想目标
;参阅
命令错误
可以了解 或其它命令是怎样导致
忽略错误的。
" 处理 % 文件的过程
缺省情况下, 开始于第一个目标(假想目标的名称前带‘/)。这个目标称为缺
省最终目标(即 最终更新的目标,具体内容请看
指定最终目标的参数
一节)。
在上节的简单例子中,缺省最终目标是更新可执行文件‘/,所以我们将该规则设
为第一规则。这样,一旦您给出命令:
就会读当前目录下的 % 文件,并开始处理第一条规则。在本例中,第一条
规则是连接生成‘/,但在 全部完成本规则工作之前,必须先处理‘/所依靠
的 &' 文件。这些 &' 文件按照各自的规则被处理更新,每个 &' 文件的更新规则是编
译其源文件。重新编译根据其依靠的源文件或头文件是否比现存的 &' 文件更‘新’,或者
&' 文件是否存在来判断。
其它规则的处理根据它们的目标是否和缺省最终目标的依赖相关联来判断。如果
一些规则和缺省最终目标无任何关联则这些规则不会被执行,除非告诉 强制执行
(如输入执行 命令)。
剩余63页未读,继续阅读
风去沙来
- 粉丝: 189
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1