- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
写Makefile是一个非常便利的编译方法,由于以前习惯把所有的代码都集中在一个文件中,体现不出make的优势,当把源代码拆分成若干个源文件,Makefile就显得必要了。以下是一份简单的Makefile的教程,参考自A Simple Makefile Tutorial。正如原文所说,这份教程只是打算让初学者快速入门,写自己的makefile,来维护中小型的项目。
一个简单的例子,用KR C中4.5那个例子:主程序(main.c)、函数代码(getop.c, stack.c, getch.c)、头文件(calc.h)。一般的,我们会使用
1 gcc -o calc main.c getch.c getop.c stack.c -I. 来编译。-I.是指gcc在当前目录(.)下寻找include文件。如果不用makefile,在测试-修改-调试过程中,如果我们不想重敲那条 编译指令的话,我们必须不停地在终端中按上下键来寻找最后的那条编译指令。不幸的是,这种编译方法有两个缺陷:1. 当你把编译指令丢失或者换电脑的时候,这样效率会很低;2. 当我们只修改了一个.c文件时,每一次都将必须重新编译所有的文件,这非常耗时,不划算。现在是切入主题的时候了最简单的makefile写法:Version 1
1
2 calc: main.c getch.c getop.c stack.c
????gcc -o calc main.c getch.c getop.c stack.c -I. 如果把这些语句写入一个叫Makefile或者makefile的文件,然后在终端中输入make,她将会按你在makefile中要求地编译。注 意:第一行中并没有任何参数,只是在冒号(:)后列出编译中所需的文件,当第一行中的任何文件中更改时,make就知道calc需要重新编译了。现在我们 已经解决了问题1,不用上下按箭头了,但是对于问题2依旧没有很好地解决。注意,非常重要:gcc前面必须有一个tab,在任何指令之前都要有一个 tab,不然make就会罢工的。
让事情变得更有效率一点:Version 2
1
2
3
4
5 CC = gcc
CFLAGS = -I.
?
calc: main.c getch.c getop.c stack.c
????$(CC) -o calc main.c getch.c getop.c stack.c $(CFLAGS) 现在我们新定义了两个常量CC和CFLAGS。这些是与make交流的特殊的常量,让make知道我们要怎么编译.c文件。CC是C编译器所使用的,CFLAGS是编译用的参数。make会先分别编译.c文件,然后生成可执行文件calc。
这种形式的makefile在小项目中非常有效,但是有一个遗憾:include文件的变动。如果我们修改了calc.h文件,make是不会重新 编译.c文件的,事实上我们需要重新编译。为了解决这一问题,我们必须告诉make所有的.c文件依赖于.h文件。我们可以在makefile中增加一条 规则:Version 3
1
2
3
4
5
6
7
8
9 CC = gcc
CFLAGS = -I.
DEPS = calc.h
?
%.o: %.c $(DEPS)
????$(CC) -c -o $@ $ $(CFLAGS)
?
calc: main.o getch.o getop.o stack.o
????$(CC) -o calc main.o getch.o getop.o stack.o $(CFLAGS) 首先宏定义DEPS,声明.c文件所依赖的.h文件。然后我们定义一条规则,为所有的.c文件生成一个.o文件。规则描述:.o文件依赖于.c文件 和DEPS中声明的.h文件,为了产生.o文件,make需要使用CC中声明的编译器来编译.c文件。-c 意味着产生object文件,-o $@ 意思是编译生成的文件用上面的%.o来命名,$ 指依赖关系中的第一项(%.c)CFLAGS的定义和之前一样。
最后为了简化,我们使用特殊的宏定义 $@ 和 $^ ,分别表示冒号(:)的左右两边。为了让make中所有的规则更具通用性,在Version 4中,我们把所有的include文件作为DEPS的一部分,所有的object文件作为OBJ的一部分:Version 4
01
02
03
04
05
06
07
08
09
10 CC = gcc
CFLAGS = -I.
DEPS = calc.h
OBJ = main.o getch.o getop.o stack.o
?
%.o: %.c $(DEPS)
????$(CC) -c -o $@ $ $(CFLAGS)
?
calc: $(OB
您可能关注的文档
- 【电子档杂志制作软件】如何在flash电子杂志中添加音乐?.pdf
- 【真题】2015天津医科大护理综合考研真题.pdf
- 【真题】2015年南开大学人力资源管理真题.pdf
- 【满分分享】考驾照科一规律和经验总结.pdf
- 【第二步】数据上传教程二(上架商品).doc
- 【联想乐phoneS2教程】关于Recovery,你知道多少?.doc
- 【语文】2015全品高考猜题最有可能考的20题[简易版].pdf
- 【金版教程】2014高考生物二轮总复习 争分夺冠七步走 提高做题的规范性和文字表述能力1 新人教版.doc
- 【超级精品】2011年高考第一轮总复习物理全套学案(教师版):第三章.doc
- 【高考帮帮团】2015高考夺分素材:热点人物篇——历史类.pdf
文档评论(0)