Linux-Makefile.docVIP

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux-Makefile

Linux下Makefile教程 转自陈皓 CSDN 概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都 为你做了这个工作,但我觉得要作一个好的和 professional的程序员,makefile还是要懂 。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解 HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、 功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要 先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作, 因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工 程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释make file中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,V isual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译 方法。 现在讲述如何写 makefile的文章比较少,这是我想写这篇文章的原因。当然,不同厂商的 make各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅 对GNU的make进行讲述,我的环境是RedHat Linux 8.0,make的版本是3.80。必竟,这个m ake是应用最为广泛的,也是用得最多的。而且其还是最遵循于IEEE 1003.2-1992 标准的 (POSIX.2)。 在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知 识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UN IX下的GCC和CC。 关于程序的编译和链接 —————————— 在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首 先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件, 即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行 文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需 要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中) ,只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应 该对应于一个中间目标文件(O文件或是OBJ文件)。 链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是 OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标 文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多, 而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间 目标文件打个包,在Windows下这种包叫“库文件”(Library File ,也就是 .lib 文件 ,在UNIX下,是Archive File,也就是 .a 文件。 总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编译时 ,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出 一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中 找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种 错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数 的Object File. 好,言归正传,GNU的make有许多的内容,闲言少叙,还是让我们开始吧。 Makefile 介绍 ——————— make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接 程序。 首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例 来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们 要写一个Makefile来告诉

文档评论(0)

liudao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档