- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux学习之makefile
Makefile学习笔记
--- 杨洪涛
在Linux下编程,make 是个很重要的工具。它的作用就是通过解析Makefile 文件,构建和管理整个工程的编译和链接。所以每一个工程,我们都有投入一些时间去完成一个或者多个称之为 Makefile 文件的编写。Linux内核源代码就是个和好的例子。要想能更好的学习,编译内核,就要能看懂和更改他下面的Makefile文件。
一切从简单的开始,先来一个例子。分析一个简单的 Makefile,它对一个包含 8 个 C 的源代码和三个头文件的工程进行编译和链接。这个 Makefile 提供给了 make 必要的信息,make 程序根据 Makefile 中的规则描述执行相关的命令来完成指定的任务(如:编译、链接和清除编译过程文件等):
objects = main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit $(objects)
上例的 Makefile,只要在命令行中输入make回车,这个工程就会被自动编译。edit就是这次make编译的最终目标,它由其中的8个c文件编译链接生成。文件一开头定义一个变量objects,它被赋值为main.o kbd.o command.o display.o insert.o search.o files.o utils.o这个字符串,下面的$(objects)就是对它的引用。cc -o edit $(objects) 就是编译链接这几个文件为最终可执行文件edit的命令(记住:命令行要用Tab键的空格开头),main.o : main.c defs.h 以及下面类似的语句,描述的是编译的规则和依赖关系,既:main.o目标文件是有main.c和def.h编译生成的,一下类似语句意义皆是如此。最后的
clean :
rm edit $(objects) 。clean就相当与C语言中的lable,当在命令中输入make clean时。就会执行rm edit $(objects)语句。
总结一下make 是如何工作的:
1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。
5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生成make的终极任务,也就是执行文件edit了。
其实Makefile就是描述了这点东西,要编译生成的目标文件和生成目标的源文件的各自的生成的依赖关系,还要就是要执行的命令。
但是真正的项目工程往往是庞大的,各个模块已目录树的形式,组织在一起,它的编译链接非常复杂。每一个子目录有一个makefile文档,子目录makefile文档根据上级目录makefile文档命令启动编译,如linux的源代码。怎样把这些文件串在一起,就需要make中的变量定义如例子中的objects,文件包含如:includefilename,还有类似预编译#if的语句,和许多的函数来
您可能关注的文档
最近下载
- 2024电梯监督检验和定期检验指南第1部分:乘客和载货电梯.pdf VIP
- 合成药物工艺研究.pptx VIP
- 电气预防性试验及防雷试验工程方案投标文件(技术方案).doc
- 基于“六位一体”内部控制的创新实践.pdf VIP
- 外商投资产业指导目录(2007年修订)(全文).doc VIP
- 新一代大学英语(提高篇)视听说教程 1 B1U1.pptx VIP
- 2025年秋新人教版数学三年级上册全册课件.pptx
- 吉J2020-011:木塑复合材料景观工程构造.pdf VIP
- 2024电梯监督检验和定期检验指南第3部分:杂物电梯.docx VIP
- 服装裁剪与制作(第三版)全书电子教案教学课件汇总.ppt
文档评论(0)