




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux下C语言编程基础(Makefile)2005-0l-l8l0:28:23来自:赛迪网假设我们有下面这样的一个程序,源代码如下:/*main.c*/#includemytooll.h#includemytool2.hintmain(intargc,char*argv)mytooll_print(hello);mytool2_print(hello);/*mytooll.h*/#ifndef_MYT00L_1_H#define_MYTOOL_1_Hvoidmytool1_print(char*print_str);#endif/*mytool1.c*/#includemytool1.hv
2、oidmytool1_print(char*print_str)printf(Thisismytoollprint%s,print_str);/*mytool2.h*/#ifndef_MYT00L_2_H#define_MYTOOL_2_Hvoidmytool2_print(char*print_str);#endif/*mytool2.c*/#includemytool2.hvoidmytool2_print(char*print_str)printf(Thisismytool2print%s,print_str);当然由于这个程序很短,我们可以这样来编译:gcc-cmain.cgcc-cm
3、ytooll.cgcc-cmytool2.cgcc-omainmain.omytooll.omytool2.o这样的话我们也可以产生main程序,而且也不是很麻烦。但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytooll.c)那么我们难道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让它帮我去完成不就可以了。是的对于这个程序来说,是可以起到作用的。但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make。我们只要执行以下make
4、,就可以把上面的问题解决掉。在我们执行make之前,我们要先编写一个非常重要的文件。一Makefile。对于上面的那个程序来说,可能的一个Makefile的文件是:#这是上面那个程序的Makefile文件:main:main.omytooll.omytool2.ogcc-omainmain.omytooll.omytool2.omain.o:main.cmytool1.hmytool2.hgcc-cmain.cmytool1.o:mytool1.cmytool1.hgcc-cmytool1.cmytool2.o:mytool2.cmytool2.hgcc-cmytool2.c有了这个Makef
5、ile文件,不论我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件它连理都不想去理的。F面我们学习Makefile是如何编写的。在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是:target:componentsTABrule第一行表示的是依赖关系。第二行是规则。比如说我们上面的那个Makefile文件的第二行。main:main.omytool1.omytool2.o表示我们的目标(target)main的依赖对象(components)是main.om
6、ytooll.omytool2.o当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令。就象我们的上面那个Makefile第三行所说的一样要执行gcc-omainmain.omytooll.omytool2.o注意规则一行中的TAB表示那里是一个TAB键Makefile有三个非常有用的变量。分别是$,$,$代表的意义分别是:$目标文件,$-所有的依赖文件,$-第一个依赖文件。如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:#这是简化后的Makefilemain:main.omytool1.omytool2.ogcc-o$main.o:main.cmytool1.hmytool2.hgcc-c$mytool1.o:mytool1.cmytool1.hgcc-c$mytool2.o:mytool2.cmytool2.hgcc-c$经过简化后,我们的Makefile是简单了一点,不过人们有时候还想简单一点。这里我们学习一个Makefile的缺省规则.c.o:gcc-c$这个规则表示所有的.0文件都是依赖与相应的.c文件的。例如mytool.o依赖于mytool.c这样Makefile还可以变为:#这是再一次简化后的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 批发业货架陈列技巧考核试卷
- 健康营养品批发商的智慧物流技术创新应用考核试卷
- 勘察项目项目管理海洋工程文化建设考核试卷
- 体育组织的历史与演变考核试卷
- 用火安全主题班会课件
- 交通文明与安全课件
- 作品采购合同范本模板
- 芒果直播代售合同范本
- 装修工程供应合同范本
- 酒店客房服务规范与操作流程优化制度
- 临床家庭化产房开展经验分享
- 2024年世界职业院校技能大赛高职组“市政管线(道)数字化施工组”赛项考试题库
- 安徽省六安市裕安区六安市独山中学2024-2025学年高一上学期11月期中生物试题(含答案)
- 低血糖的护理查房
- GB/T 44718-2024城市轨道交通无障碍运营服务规范
- DB41T 2567-2023 消防技术服务机构服务规范
- 音乐鉴赏与实践 第一单元第四课音乐的力量(下)
- 《外科护理学(第七版)》考试复习题库-上(单选题)
- 92枪械课件教学课件
- 追觅科技在线测评逻辑题
- (人教PEP2024版)英语一年级上册Unit 1 教学课件(新教材)
评论
0/150
提交评论