C语言编程之 makfile规则文库

C语言编程之 makfile规则文库

ID:47026015

大小:55.50 KB

页数:11页

时间:2019-06-29

C语言编程之 makfile规则文库_第1页
C语言编程之 makfile规则文库_第2页
C语言编程之 makfile规则文库_第3页
C语言编程之 makfile规则文库_第4页
C语言编程之 makfile规则文库_第5页
资源描述:

《C语言编程之 makfile规则文库》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、标题:关于makefile0)介绍本文将首先介绍为什么要将你的C源代码分离成几个合理的独立档案,什么时候需要分,怎么才能分的好。然后将会告诉你GNUMake怎样使你的编译和连接步骤自动化。对于其它Make工具的用户来说,虽然在用其它类似工具时要做适当的调整,本文的内容仍然是非常有用的。如果对你自己的编程工具有怀疑,可以实际的试一试,但请先阅读用户手册。1)多文件项目1.1为什么使用它们?首先,多文件项目的好处在那里呢?它们看起来把事情弄的复杂无比。又要header文件,又要extern声明,而且如果

2、需要查找一个文件,你要在更多的文件里搜索。但其实我们有很有力的理由支持我们把一个项目分解成小块。当你改动一行代码,编译器需要全部重新编译来生成一个新的可执行文件。但如果你的项目是分开在几个小文件里,当你改动其中一个文件的时候,别的源文件的目标文件(objectfiles)已经存在,所以没有什么原因去重新编译它们。你所需要做的只是重现编译被改动过的那个文件,然后重新连接所有的目标文件罢了。在大型的项目中,这意味着从很长的(几分钟到几小时)重新编译缩短为十几,二十几秒的简单调整。只要通过基本的规划,将一

3、个项目分解成多个小文件可使你更加容易的找到一段代码。很简单,你根据代码的作用把你的代码分解到不同的文件里。当你要看一段代码时,你可以准确的知道在那个文件中去寻找它。从很多目标文件生成一个程序包(Library)比从一个单一的大目标文件生成要好的多。当然实际上这是否真是一个优势则是由你所用的系统来决定的。但是当使用gcc/ld(一个GNUC编译/连接器)把一个程序包连接到一个程序时,在连接的过程中,它会尝试不去连接没有使用到的部分。但它每次只能从程序包中把一个完整的目标文件排除在外。因此如果你参考一个

4、程序包中某一个目标档中任何一个符号的话,那么这个目标文件整个都会被连接进来。要是一个程序包被非常充分的分解了的话,那么经连接后,得到的可执行文件会比从一个大目标文件组成的程序包连接得到的文件小得多。又因为你的程序是很模块化的,文件之间的共享部分被减到最少,那就有很多好处——可以很容易的追踪到臭虫,这些模块经常是可以用在其它的项目里的,同时别人也可以更容易的理解你的一段代码是干什么的。当然此外还有许多别的好处……1.2何时分解你的项目很明显,把任何东西都分解是不合理的。象“世界,你们好”这样的简单程序

5、根本就不能分,因为实在也没什么可分的。把用于测试用的小程序分解也是没什么意思的。但一般来说,当分解项目有助于布局、发展和易读性的时候,我都会采取它。在大多数的情况下,这都是适用的。(所谓“世界,你们好”,既'helloworld',只是一个介绍一种编程语言时惯用的范例程序,它会在屏幕上显示一行'helloworld'。是最简单的程序。)如果你需要开发一个相当大的项目,在开始前,应该考虑一下你将如何实现它,并且生成几个文件(用适当的名字)来放你的代码。当然,在你的项目开发的过程中,你可以建立新的文件,

6、但如果你这么做的话,说明你可能改变了当初的想法,你应该想想是否需要对整体结构也进行相应的调整。对于中型的项目,你当然也可以采用上述技巧,但你也可以就那么开始输入你的代码,当你的码多到难以管理的时候再把它们分解成不同的档案。但以我的经验来说,开始时在脑子里形成一个大概的方案,并且尽量遵从它,或在开发过程中,随着程序的需要而修改,会使开发变得更加容易。1.3怎样分解项目先说明,这完全是我个人的意见,你可以(也许你真的会?)用别的方式来做。这会触动到有关编码风格的问题,而大家从来就没有停止过在这个问题上的

7、争论。在这里我只是给出我自己喜欢的做法(同时也给出这么做的原因):i)不要用一个header文件指向多个源码文件(例外:程序包的header文件)。用一个header定义一个源码文件的方式会更有效,也更容易查寻。否则改变一个源文件的结构(并且它的header文件)就必须重新编译好几个文件。ii)如果可以的话,完全可以用超过一个的header文件来指向同一个源码文件。有时将不可公开调用的函数原型,类型定义等等,从它们的C源码文件中分离出来是非常有用的。使用一个header文件装公开符号,用另一个装私人

8、符号意味着如果你改变了这个源码文件的内部结构,你可以只是重新编译它而不需要重新编译那些使用它的公开header文件的其它的源文件。iii)不要在多个header文件中重复定义信息。如果需要,在其中一个header文件里#include另一个,但是不要重复输入相同的header信息两次。原因是如果你以后改变了这个信息,你只需要把它改变一次,不用搜索并改变另外一个重复的信息。iv)在每一个源码文件里,#include那些声明了源码文件中的符号的所有header文件。这样一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。