通用Makefile的编写(大地小神之个人收藏)

通用Makefile的编写(大地小神之个人收藏)

ID:39808515

大小:35.00 KB

页数:4页

时间:2019-07-11

通用Makefile的编写(大地小神之个人收藏)_第1页
通用Makefile的编写(大地小神之个人收藏)_第2页
通用Makefile的编写(大地小神之个人收藏)_第3页
通用Makefile的编写(大地小神之个人收藏)_第4页
资源描述:

《通用Makefile的编写(大地小神之个人收藏)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一个通用Makefile的编写我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只需要执行一个make就OK了,这样大大提高了开发效率。但是Makefile的语法规则众多,而且缺乏参考资料,对于初学者来说,写起来还是有一定的难度,往往令很多人望而生畏。下面我们介绍一个比较通用而且简洁的Makefile,大家只要对它稍作修改就可以用在你们自己的工程里了。现在假设我们有一个工程叫my_project,工程源码目录

2、下面有app1.c,app2.c,app3.c,app4.c以及main.c这五个源文件。我们现在需要编译出app1.o,app2.o,app3.o,app4.c以及main.o,然后再把这些.o文件链接成为一个ELF格式的可执行程序叫做my_app。我们先看一个最简单的Makefile如何编写:my_app:main.o,app1.o,app2.o,app3.o,app4.ogcc–omy_appmain.oapp1.o,app2.o,app3.o,app4.omain.o:main.cgcc–cmain.capp1.o:app1.cgcc–capp1.capp2.o:app

3、2.cgcc–capp2.capp3.o:app3.cgcc–capp3.cclean:rmmain.oapp1.o,app2.o,app3.o,app4.o这是一个傻瓜式的Makefile,不灵活,而且不具备可复制性,想象一个如果我们的工程下面有50个源文件,那岂不是要一个一个写出来。我们的目标是写一个Makefile,只要稍作修改就可以在各个工程之间通用。下面这个Makefile就可以满足这个要求:SRCS=$(wildcard*.c)OBJS=$(SRCS:.c=.o)CC=gccINCLUDES=-I/home/noah/build_sqlite3/includeLIB

4、S=-L/home/noah/build_sqlite3/lib-lsqlite3CCFLAGS=-g-Wall-O0my_app:$(OBJS)$(CC)$^-o$@$(INCLUDES)$(LIBS)%.o:%.c$(CC)-c$<$(CCFLAGS)clean:rm*.o大家看这个Makefile和前一个比起来是不是简洁很多,当然理解起来不如上一个那么直观。实际上编写Makefile就是为了提高我们的工作效率,而不是增加我们的工作量。因此Makefile为我们提供了很多强大的功能,比如定义变量,使用通配符等等。只要合理利用,就可以达到事半功倍的效果。下面我们一条一条分析这

5、个Makefile:(wildcart:通配符)SRCS=$(wildcard*.c)这条语句定义了一个变量SRCS,它的值就是当前面目录下面所有的以.c结尾的源文件。OBJS=$(SRCS:.c=.o)这里变量OBJS的值就是将SRCS里面所有.c文件编译出的.o目标文件CC=gcc变量CC代表我们要使用的编译器INCLUDES=-I/home/noah/build_sqlite3/includeLIBS=-L/home/noah/build_sqlite3/lib-lsqlite3这里指定除了编译器默认的头文件和库文件的路径之外需要额外引用的头文件路径以及库的路径。CCFL

6、AGS=-g-Wall-O0CCFLAGS变量存放的是编译选项my_app:$(OBJS)$(CC)$^-o$@$(INCLUDES)$(LIBS)my_app依赖于所有的.o文件,$^代表$(OBJS),$@代表my_app%.o:%.c$(CC)-c$<$(CCFLAGS)将所有的.c源代码编译成.o目标文件,这样写是不是很省事?clean:rm*.o在执行makeclean之后删除所有编译过程中生成的.o文件。这个Makefile就具备灵活的通用性,我们只要对它稍作修改就可以用在自己的工程里面。当然Makefile还有很多强大的功能,需要我们进一步学习。

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

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

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