关于makefile
日期:2007年10月12日 作者: 查看:[大字体 中字体 小字体]-
0) 介绍
本文将首先介绍为什么要将你的C源代码分离成几个合理的独立档案,什么时候需要分,
怎么才能分的好。然后将会告诉你GNU Make怎样使你的编译和连接步骤自动化。对于其它Make
工具的用户来说,虽然在用其它类似工具时要做适当的调整,本文的内容仍然是非常有用的。
如果对你自己的编程工具有怀疑,可以实际地试一试,但请先阅读用户手册。
1) 多文件项目
1.1 为什么使用它们?
首先,多文件项目的好处在那里呢?
它们看起来把事情弄得复杂无比。又要header文件,又要extern声明,而且如果需要查找
一个文件,你要在更多的文件里搜索。但其实我们有很有力的理由支持我们把一个项目分解成
小块。当你改动一行代码,编译器需要全部重新编译来生成一个新的可执行文件。但如果你的
项目是分开在几个小文件里,当你改动其中一个文件的时候,别的源文件的目标文件(object
files)已经存在,所以没有什么原因去重新编译它们。你所需要做的只是重现编译被改动过的
那个文件,然后重新连接所有的目标文件罢了。在大型的项目中,这意味着从很长的(几分钟
到几小时)重新编译缩短为十几,二十几秒的简单调整。只要通过基本的规划,将一个项目分
解成多个小文件可使你更加容易的找到一段代码。很简单,你根据代码的作用把你的代码分解
到不同的文件里。当你要看一段代码时,你可以准确的知道在那个文件中去寻找它。从很多目
标文件生成一个程序包 (Library)比从一个单一的大目标文件生成要好的多。当然实际上这是
否真是一个优势则是由你所用的系统来决定的。但是当使用 gcc/ld (一个 GNU C 编译/连接
器) 把一个程序包连接到一个程序时,在连接的过程中,它会尝试不去连接没有使用到的部分。
但它每次只能从程序包中把一个完整的目标文件排除在外。因此如果你参考一个程序包中某一
个目标档中任何一个符号的话,那么这个目标文件整个都会被连接进来。要是一个程序包被非
常充分的分解了的话,那么经连接后,得到的可执行文件会比从一个大目标文件组成的程序包
连接得到的文件小得多。又因为你的程序是很模块化的,文件之间的共享部分被减到最少,那
就有很多好处——可以很容易的追踪到臭虫,这些模块经常是可以用在其它的项目里的,同时别
人也可以 更容易的理解你的一段代码是干什么的。当然此外还有许多别的好处……
1.2 何时分解你的项目
很明显,把任何东西都分解是不合理的。象“世界,你们好”这样的简单程序根本就不能分,
因为实在也没什么可分的。把用于测试用的小程序分解也是没什么意思的。但一般来说,当分
解项目有助于布局、发展和易读性的时候,我都会采取它。在大多数的情况下,这都是适用的。
(所谓“世界,你们好”,既 'hello world' ,只是一个介绍 一种编程语言时惯用的范例程序,
它会在屏幕上显示一行 'hello world' 。是最简单的程序。)如果你需要开发一个相当大的项
目,在开始前,应该考虑一下你将如何实现它,并且生 成几个文件(用适当的名字)来放你的
代码。当然,在你的项目开发的过程中,你可以 建立新的文件,但如果你这么做的话,说明你
可能改变了当初的想法,你应该想想是否 需要对整体结构也进行相应的调整。对于中型的项目,
你当然也可以采用上述技巧,但你也可以就那么开始输入你的代码, 当你的码多到难以管理的
时候再把它们分解成不同的档案。但以我的经验来说,开始时 在脑子里形成一个大概的方案,
并且尽量遵从它,或在开发过程中,随着程序的需要而 修改,会使开发变得更加容易。
1.3 怎样分解项目
先说明,这完全是我个人的意见,你可以(也许你真的会?)用别的方式来做。这会触 动
到有关编码风格的问题,而大家从来就没有停止过在这个问题上的争论。 在这里我只是给出我
自己喜欢的做法(同时也给出这么做的原因):
i) 不要用一个 header 文件指向多个源码文件(例外:程序包的header文件)。 用一个
header定义一个源码文件的方式 会更有效,也更容易查寻。否则改变一个源文件的结构(并且 - [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
-
- 关于makefile 相关文章:
- ·关于三级片和A片的区分标准
- ·关于局域网限制网速的问题
- ·关于web.xml配置的详细说明
- ·劳动法相关小案例:病假工资如何计算?
- ·大航海时代4 中文版攻关资料大全
- ·静态路由的设置及相关命令
- ·解决与HTTP 500 – 内部服务器错误错误信息有关的问题
- ·全面解决Generic host process for win32 services遇到问题需要关闭
- ·关于oracle日期函数的介绍和使用
- ·EXE文件打不开——恢复EXE文件关联
- 关于makefile 相关软件
- ·《孤岛惊魂》通关存档
- ·《火影忍者2》格斗闯关
- ·《危险关系三姐妹》性感游戏稚春篇
- ·《大航海时代4威力加强版》地图全开通关存档
- ·杨家将传奇一线40关 完整版
- ·智能开关机 V3.20
- ·魔兽世界 安其拉关门录像
- ·电脑开关机画面修改程序 V2.40
- ·《轩辕剑4》全关卡存档
- ·英雄无敌5 全通关存档
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:Gcc HowTo
下一篇:VC++编程实现网络嗅探器
精品推荐
热点TOP10
- ·C语言教程第六章:指针
- ·C/C++笔试、面试题目大汇总
- ·MSComm控件使用详解
- ·学生成绩管理系统实习
- ·Windows下C语言网络编程快速入门
- ·飞机订票系统设计
- ·c#.net连接access操作类
- ·进程调度模拟程序
- ·打字游戏
- ·C#基础概念二十五问
- ·makefile规则
- ·C语言的常用库函数使用方法分析及用途
- ·Windows编程基础 - 概述
- ·c语言中的结构(struct)和联合(union)简介
- ·一个简单的链表程序
- ·GDB 的文档
- ·漫谈C++ Builder多线程编程技术
- ·VC下调用ACM音频编程接口压缩Wave音频
- ·C语言教程第五章:函数
- ·ASP.NET在线用户列表精确版——解决用户意外退出在线列表无法及时更新问题
特别推荐
- ·C#基础概念二十五问
- ·利用C#远程存取Access数据库
- ·入门教程:实例详解C++友元
- ·C语言基础教程(三)输入输出函数及控制流程语句
- ·VC下调用ACM音频编程接口压缩Wave音频
- ·如何在C/C++中调用Java
- ·设计的一个计算器类的源代码,很简陋哦,请各位高手不要见笑!
- ·gSOAP中内存的使用
- ·Windows下C语言网络编程快速入门
- ·C语言教程第六章:指针
- ·漫谈C++ Builder多线程编程技术
- ·学生成绩管理系统实习
- ·用C#实现pdf文件的完整性验证
- ·将程序从托管扩展 C++ 迁移到 C++/CLI(1)
- ·链表的c语言实现(六)
- ·C语言库函数 (D类字母)
- ·用AVIFile函数制做AVI文件基本步骤
- ·利用C++实现的贪吃蛇游戏
- ·Windows API-GDI入门基础知识详解(3)
- ·C语言库函数 (C类字母)
