GNU中文make

所需积分/C币:50 2012-03-28 16:15:53 1.34MB PDF
1
收藏 收藏
举报

GNU中文make,文档非常详细。pdf在手,再无所求。
GNU make 4文于册 4.6 Makefile伪目标… 46 4.7强制目标(没有命令或依赖的规则) 4.8空目标文件 …50 49 Makefile的特殊月标 .51 4.10多目标 54 4.11多规则目标 55 4.12静态模式 56 4.12.1 静态模式规则的语法 ∴56 4.12.2 静态模式和隐含规则 58 4.13双冒号规则…… 159 4.14自动产生依赖 60 第五章:规则的命令 63 5为规则书写命令 63 51命令回显…… 163 52命令的执行 64 53并发执行命令 .65 54命令执行的错误. .67 55中断make的执行 68 5.6make的递归执行… 69 561变量MAKE ..70 562变量和递归 71 563命令行选项和递归 5.64W选项 77 5.7定义命令包 58空命令 80 第六章: Makefile中的变量… 81 6使用变量 81 6.1变量的引用 :.::::::.:...:::: 82 6.2两种变量定义(赋值) 83 62.1递归展开式变量 83 622直接展开式变量 85 623定义一个空格 86 624“?=”操作符… 87 63变量的高级用法 6.3.1变量的替换引用 88 63.2变量的套嵌引用 64变量取值 92 6.5如何设置变量…… 93 6.6追加变量值 …94 6.7 override指示符 68多行定义 98 6.9系统环境变量 9 6.10目标指定变量 101 6.11模式指定变量 103 第七章: Makefile的条件执行 .104 7 Makefile的条件判断 104 个例子 D国国面国1国国国面国国 ..8.8..3. 104 72条件判断的基本语法 105 7.3标记测试的条件语句 108 笫八章:make的内嵌函数… 面国重 109 8make的函数 109 2004年9月11日 GNU make 4文于册 8.1函数的调用语法… 109 82文本处理函数… 110 8.2.1 $(subst FROM, TO, TEXT) .:::.:::: 110 8.2.2 S(patsubst PATTERN, REPLACEMENT, TEXT) 110 8.2.3 $(strip STRINT) 112 8.2.4 $(findstring FIND, IN) 112 8.2.5 $(filter PATTERN., TEXT 8.2.6 $(filter-out PATTERN., TEXT 113 8.2.7 S(sort LIST 113 828$( word n,TEXT).… 114 8.2.9 $wordlist S, E, TEXT 114 8.2.10 S(words TEXT) 114 8.211 S(firstword NAMES.) .115 83文件名处理函数 …115 8.3.1 $(dir NAMES.) 115 8.3.2 $(notdir NAMES 翻重1 116 833$( suffix names,)…,,,… ■1 116 8.3.4 S(basename NAMES 835$( addsuffix suFFⅨ X, NAMES.)… 117 8.3.6 S(addprefix PREFIX, NAMES 118 837$〔join凵|ST1,LST2) 118 8.3.8 $(wildcard PATTERN) 119 84 foreach函数 119 85讦函数 120 8.6ca|函数 121 8.7va|ue函数 …123 88eva函数 124 89mgin函数 125 8.10she数… 127 8.11make的控制函数 ……128 8.111 S(error TEXT 128 8.112 S(warning TEXT.) 129 第九章:执行make 130 9执行make …130 9.1指定 makefile文件…… 130 92指定终极目标 131 9.3替代命令的执行 133 94防止特定文件重建 135 9.5替换变量定义 136 9.6使用make进行编译测试 137 9.7 Tmake的命令行选项…… 11面国国B国面 138 第十章:make的隐含规则 143 10使用隐含规则 143 101隐含规则的使用…. 143 102make的隐含规则一览 145 10.3隐含变量 148 10.3.1 代表命令的变量 149 10.3.2 命令参数的变量 150 104make隐含规则链 151 10.5模式规则 153 10.5.1 模式规则介绍 153 10.52 模式规则示例… 155 10.5.3 自动化变量… .156 2004年9月11日 GNu make文于册 T10.54 T模式的匹配 159 10.5.5 万用规则 160 10.56 重建内嵌隐含规则 .161 10.6缺省规则 162 10.7后缀规则 162 108隐含规则搜索算法∴… 164 笫十一章:使用make更新静态库文件 166 11更新静态库文件…… ∴166 111库成员作为日标 166 12静态库的更新 167 11.2.1 更新静态库的符号索引表 168 113make静态库的注意享项… 168 114静态库的后缀规则…. 169 笫十二章: GNU make的特点…… 面着面 170 12 GNU make的一些特点 170 121源自 System v的特点 170 122源自其他版本的特点 …,171 123 GNU make自身的特点 172 第十三章和其它版本的兼容… 174 13不兼容性 174 第十四章 Makefi|e的约定 b 14书写约定 176 141基本的约定 176 142规则命令行的约定 178 14.3代表命令变量 179 144安装目录变量 180 145 Makefi|e的标准目标名 185 146安装命令分类 190 第十五章make的常见错误信息 193 15make产生的错误信息 193 附录1:关键字索引 196 GNU make可识别的指示符 ● GNU make函数 197 GNU make的自动化变量 ..197 GNU make环境变量∴… 198 后序 198 2004年9月11日 5 GNu make文于册 关于本书 本文瑾献给所有热爱 Linux的程序员!本中文文档版权所有。 本文比较完整的讲述 GNU make工具,涵盖 GNU make的用法、话法。同时重点 论如何为一个工程编写 Makefile。作为一个Linuⅹ程序员,make工具的使用以及编 写 Makefile是必需的。系统、详细讲述make的中文资料比较少,出于对广大中文 Linuxer 的支持,本人在工作之余,花了18个多月时间完成对“ "info make”的翻译整理,完成 这个中文版手册。木书不是一个纯粹的语言翻译版木,其中对 GNU make的一些语法 和用法根据我个人的工作经验进行了一些详细分析和说明,也加入了一些个人的观点和 实践总结。本书的所有的例子都可以在支持V3.8版本的 GNU make的系统中正确执行。 由于个人水平限制,本文在一些地方存在描述不准确之处。恳请大家在阅读过程中, 提出您宝贵的意见,也是对我个人的帮助。我的个人电子邯箱地址: xhbdaha@126cm。非常愿意和大家交流!共同学习。 阅读本书之前,读者应该对GNU的工具链和 Linux的一些常用编程工具有一定的 了解。诸如:gcc、as、ar、ld、yacc等;同时在书写 Makefile时,需要能够进行一些 基本的shl编程。这些工具是维护一个工程的基础。如果大家对这些工具的用法不是 很熟悉,可参考项目资料。 阅读本文的几点建议: 1.如果之前你对 GNU make没有了解、当前也不想深入的学习 GNU make的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 2.如果你已经对 GNU make比较熟悉,你更需要关心此版本的新增特点、功能 和之前版本不兼容之处;也可以作为开发过程过程的参考手册 之前你对 GNU make没有概念、或者刚开始接触,本身又想成为一个 Linux下 的专业程序员,那么建议:完整学习本文的各个章节,包括了基础知识和高级 用法、技巧。它会为你在Liux下的工程开发、工程管理提供非常有用的帮助。 4.此中文文档当前版本V1.5,本文的所有勘误和最新版本可在主 页htp:/ xhbdahai. cublogcn上获取!! 谢谢! 徐海兵2005-12-31 2004年9月11日 6 GNu make文于册 第一章:概述 11概述 LinuⅨ环境下的程序员如果不会使用 GNU make来构建和管理自己的工程,应该 不能算是一个合格的专业程序员,至少不能称得上是Unⅸx程序员。在 Linux(unⅸx)环 境下使用GNU的make工具能够比较容易的构建一个属于你自己的工程,整个工程的 编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一 些时间去完成一个或者多个称之为 Makefile文件的编写。此文件正是make正常工作 的基础 所要完成的 Makefile文件描述了整个工程的编译、连接等规则。其中包抬:工程 中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写 Makefile的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通 常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的唯一的一件 事就是在she‖提示符下输入make命令。整个工程完全自动编译,极大提高了效率 make是一个命令工具,它解释 Makefile中的指令(应该说是规则)。在 Makefile 文件中描述了整个工程所有文件的编译顺序、编译规则。 Makefile有自己的书写格式、 关键字、函数。像C语言有自己的格式、关键字和函数一样。而且在 Makefile中可以 使用系统Sh所提供的任何命令来完成想要的工作。 Makefile(在其它的系统上可能 是另外的文件名)在绝大多数的IDE开发环境中都在使用,已经成为一种工程的编译 方法。 目前,系统完整的介绍make工具和如何编写 Makefile的中文文档比较少。我整 理这个文档就是希望能使众多的Linuκ环境下的程序员能够比较容易的掌握和学会使 用 GNU make。本文所要介绍的是GNU的make,采用 Red hat fc3(包括最新发布 的G№ J Linux系统)所集成的 GUN make工具 本文中所有示例均采用C语言的源程序,因为它是目前最普遍使用的一种语言 当然make工具不仅仅是用来管理C语言工程的,那些编译器只要能够在she下运行 的语言所构建的工程都可以使用make工具来管理。Make工作不仅仅可以用来编译源 代码,它也可以完成一些其它的功能。例如,有这样的需求:当我们修改了某个或者某 2004年9月11日 GNU make 4文于册 些文件后,需要能够根据修改的文件来自动对相关文件进行重建或者更新。那么应该考 虑使用 GNU make工具。 GNU make工具为我们实现这个目的提供了非常有利的支持 工程中根据源文件的修改情况来进行代码的编译正是使用了make的这个特征。make 执行时,根据 Makefile的规则检查文件的修改情况,决定是否执行定义的动作(那些 修改过的文件将会被重新编译)。这是 GNU make的执行依据。 12准备知 在开始我们关于make的讨论之前,首先需要明确一些基本概念 编译:把高级语言书写的代码转換为杋器可识别的杋器指令。编译高级语言后生成 的指令虽然可被杋器识別,但是还不能被执行。编译时,编译器检查高级语言的语法 函数与变量的声明是否正确。只有所有的语法正确、相关变量定义正确编译器就可以编 译出中间目标文件。通常,一个高级语言的源文件都可对应一个目标文件。目标文件在 Linux中默认后缀为“o”(如“foo.c”的目标文件为“foo.。”) 为了和规则的目标文件相区别。本文将编译高级语言后生成的目标文件成为.0文 件 链接:将多、σ文件,或者.σ文件和库文件锤接成为可被操作系统执行的可执行程 序( Linux环境下,可执行文件的格式为“ELF”格式)。链接器不检查函数所在的源文 件,只检查所有.0文件中的定义的符号。将.0文件中使用的函数和其它.O或者库文件 中的相关符号进行合并,对所有文件中的符号进行重新安排(重定位),并链接系统相 关文件(程序启动文件等)最终生成可执行程序。链接过程使用GNU的“ld”工具 静态库:又称为文档文件( Archive file)。它是多个.0文件的集合。 Linux中静态 库文件的后缀为“a”。静态库中的各个成员(。o文件)没有特殊的存在格式,仅仅是 一个.0文件的集合。使用“ar”工具维护和管理静态库。 共享库:也是多个.0文件的集合,但是这些.0文件时有编译器按照一种特殊的方 式生成( Linux中,共亨库文件格式通常为“ELF”格式。共享库已经具备了可执行条 件)。模块中各个成员的地址(变量引用和函数调用)都是相对地址。使用此共享库的 程序在运行时,共享库被动态加载到内存并和主程序在内存中进行连接。多个可执行程 序可共享库文件的代码段(多个程序可以共享的使用库中的某一个模块,共享代码,不 共享数据)。另外共享库的成员对象可被执行(由lbdl.so提供支持) 参考 info lo了解更加详细的关于ld的说明和用法。 2004年9月11日 GNu make文于册 第二章 GNU make介绍 2 GNU make介绍 make在执行时,需要一个命名为 Makefile的文件。这个文件告诉make以何种方 式编译源代码和链接程序。典型地,可执行文件可由一些.o文件按照一定的顺序生成 或者更新。如果在你的工程中已经存在一个活着多个正确的 Makefile。当对工程中的若 干源文件修改以后,需要根据修改来更新可执行文件或者库文件,正如前面提到的你只 需要在she下执行“make”。make会自动根据修改情况完成源文件的对应.o文件的 更新、库文件的更新、最终的可执行程序的更新 make通过比较对应文件(规则的目标和依赖,)的最后修改时间,来决定哪些文 件需要更新、那些文件不需要更新。对需要更新的文件make就执行欻据库中所记录的 相应命令(在make读取 Makefile以后会建立一个编译过程的描述欻据庳。此数据库 中记录了所有各个文件之间的相互关系,以及它们的关系描述)来重建它,对于不需要 重建的文件make什么也不做 而且可以通过make的命令行选项来指定需耍重新编译的文件。可参考92指定终 极目标一节 Problems and bugs If you have problems with GNU make or think you've found a bug, please report it to the developers; we cannot promise to do anything but we might well want to fix it Before reporting a bug, make sure you've actually found a real bug. carefully reread the documentation and see if it really says you can do what you're trying to do. If it 's not clear whether you should be able to do something or not, report that too it's a bug in the documentation! Before reporting a bug or trying to fix it yourself, try to isolate it to the smallest possible makefile that reproduces the problem Then send us the makefile and the exact results make gave you, including any error or warning messages. Please don 't paraphrase these messages it's best to cut and paste them into your report. When generating this small makefile, be sure to not use any non-free or unusual tools in your commands: you can almost always emulate what such a tool would do with simple shell commands. Finally, be sure to explain what you expected to occur; this will help us decide whether the problem was really in the documentation Once you have a precise problem you can report it in one of two ways. Either send electronic bug-make@gnu. org or use our Web-based project management tool at: http:/savannah.gnu.org/projects/make/ 2004年9月11日 GNU make 4文于册 In addition to the information above, please be careful to include the version number of make you are using. You can get this information with the command make -version. Be sure also to include the type of machine and operating system you are using. One way to obtain this information is by looking at the final lines of output from the command make--help 以上时 GNU make的bug反馈方式。如果在你使用 GNU make过程中。发现bug 或者问题。可以通过以上的方式和渠道反馈。 好了。开始我们的神奇之禎吧! 21 Makefile简介 在执行make之前,需要一个命名为 Makefile的特殊文件(本文的后续将使用 Makefile作为这个特殊文件的文件名)来告诉make需要做什么(完成什么任务),该 怎么做。通常,make工具主要被用来进行工程编译和程序链接 木节将分析一个简单的 Makefile,它对一个包含8个C的源代码和三个头文件的 工程进行编译和链接。这个 Makefile提供给了make必耍的信息,make程序根据 Makefile中的规则描述执行相关的命令来完成指定的仼务(如;编译、链接和凊除编译 过程文件等)。复杂的 Makefile我们将会在本文后续进行讨论 当使用make工具进行编译时,工程中以下几种文件在执行make时将会被编译(重 新编译) 所有的源文件没有被编译过,则对各个C源文件进行编译并进行链接,生成最 后的可执行程序; 2.每一个在上次执行make之后修改过的C源代码文件在本次执行make时将会 被重新编译; 3.头文件在上一次执行make之后被修改。则所有包含此头文件的C源文件在本 次执行make时将会被重新编译。 后两种情况是make只将修改过的C源文件重新编译生成.0文件,对于没有修改 的文件不进行任何工作。重新编译过程申,任何一个源文件的修改将产生新的对应的. 文件,新的.σ文件将和以前的已经存在、此次没有重新编译的.σ文件重新连接生成最 后的可执行程序 首先让我们先来看一些 Makefile相关的基本知识 2004年9月11日 10

...展开详情
试读 127P GNU中文make
立即下载 身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
GNU中文make 50积分/C币 立即下载
1/127
GNU中文make第1页
GNU中文make第2页
GNU中文make第3页
GNU中文make第4页
GNU中文make第5页
GNU中文make第6页
GNU中文make第7页
GNU中文make第8页
GNU中文make第9页
GNU中文make第10页
GNU中文make第11页
GNU中文make第12页
GNU中文make第13页
GNU中文make第14页
GNU中文make第15页
GNU中文make第16页
GNU中文make第17页
GNU中文make第18页
GNU中文make第19页
GNU中文make第20页

试读结束, 可继续阅读

50积分/C币 立即下载