![1[1].2.makefile使用.Linux下编译与调试.doc_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-3/4/c363835b-c0b2-4347-b66f-f9acb3bdb713/c363835b-c0b2-4347-b66f-f9acb3bdb7131.gif)
![1[1].2.makefile使用.Linux下编译与调试.doc_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-3/4/c363835b-c0b2-4347-b66f-f9acb3bdb713/c363835b-c0b2-4347-b66f-f9acb3bdb7132.gif)
![1[1].2.makefile使用.Linux下编译与调试.doc_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-3/4/c363835b-c0b2-4347-b66f-f9acb3bdb713/c363835b-c0b2-4347-b66f-f9acb3bdb7133.gif)
![1[1].2.makefile使用.Linux下编译与调试.doc_第4页](http://file1.renrendoc.com/fileroot_temp2/2020-3/4/c363835b-c0b2-4347-b66f-f9acb3bdb713/c363835b-c0b2-4347-b66f-f9acb3bdb7134.gif)
免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LINUX下编译与调试makefile使用【ITjob课程资料】makefile基本过程处理makefile的工作过程为:先将需要编译连接的c/c+源文件组织到文件makefile中,接着运行make程序,make程序读取当前文件夹下面的makefile文件信息,并根据makefile里面的组织信息,调用相应的gcc/g+/shell等程序,完成对源文件的批量编译和连接。要写makefile文件,首页必须清楚目标文件和依赖文件的概念。通常情况下,目标文件和依赖文件都是指实际的文件。例如,有makefile文件(注意文件名称就是makefile),内容如下:main.exe:main.o func.og+ -o main.exe main.o func.omain.o:main.cppg+ -c main.cppfunc.o:func.cppg+ -c func.cpp下面我们分析一下这段代码:文件第一行中的文件main.exe称为目标文件(入口),冒号后面以空格分隔的两个文件称为main.exe的依赖文件。意思是文件main.exe的产生依赖于文件main.o和func.o同样道理:第3行的main.o为目标文件(入口),main.cpp为main.o的依赖文件第5行的func.o为目标文件(入口),func.cpp为func.o的依赖文件.文件第2行(以tab开头)表示要产生第1行的目标文件需要执行的命令。对于该makefile文件,程序make处理过程如下:下面我们把所有的*.o和*.exe全部删除。执行:#:make则系统会自动生成main.exe,main.o,func.o它们的执行原理如下:make程序首先找到第一个main.exe入口,找到它的两个依赖文件main.o和func.o;通过main.o,找到main.o的入口, 发现没有main.o文件,则执行下面g+ -c main.cpp同样,找到func.o的入口,发现没有func.o文件,则执行下面的g+ -c func.cpp然后判断main.exe文件存在不存在,如果不存在,则执行g+ -o main.exe main.o func.o。下面我们更改一下func.cpp文件,则处理过程如下:make程序首先找到第一个main.exe入口,判断它的两个依赖文件main.o和func.o;通过main.o,找到main.o的入口, 发现存在main.o文件,则比较main.o的时间与main.cpp,如果发现main.o比main.cpp旧,则执行下面g+ -c main.cpp同样,找到func.o的入口,发现存在func.o文件,则比较func.o的时间与func.cpp,如果发现func.o比func.cpp旧,则执行下面的g+ -c func.cpp然后判断main.exe,如果main.exe文件存在,则判断main.exe文件的时间,如果比main.o和func.o中的任何一个旧,则执行g+ -o main.exe main.o func.o。rebuild的制作main.exe:main.o func.og+ -o main.exe main.o func.omain.o:main.cppg+ -c main.cppfunc.o:func.cppg+ -c func.cpprebuild:clean ma in.execlean:rm *.o *.exe执行make clean将清除掉文件夹中的二进制可执行文件执行make rebuild则先执行清除,再重新编译连接。注意:执行完make clean之后再次执行make rebuild会出错,除非再次执行make,或者make main.exe。带头文件的makefile增加头文件func.hint MyFunc();main.cpp修改为:#include #include func.hint main()#ifdef _DEBUG printf(Debug MyFunc is:%dn,MyFunc();#else printf(NDEBUG MyFunc is:%dn,MyFunc();#endifreturn 0;func.cpp修改为:#include func.hint MyFunc() return 123;则makefile多了头文件的文件依赖,makefile文件如下:main.exe:main.o func.og+ -o main.exe *.omain.o:main.cpp func.hg+ -c main.cpp func.o:func.cpp func.hg+ -c func.cpprebuild:clean main.execlean:rm *.o *.exe命名不同的makefile文件如果makefile不是默认的名称,则使用命令#:make f makefile文件名称变量、函数与规则随着软件项目的变大、变复杂,源文件也越来越多,如果采用前面的方式写makefile文件,将会使makefile也变得复杂而难于维护。通过make支持的变量定义、使用、内置函数和规则,可以写出通用性较强的makefile文件,使得同一个makefile文件能够适应不能的项目。定义变量的一般方法:变量名=变量值 或者 变量名:=变量值使用变量的一般方法:$(变量名)=?赋值 ?=$(变量名)引用例:将所有编译后的文件放入bin子目录下,可以采用文件路径变量的形式DIR=./bin/$(DIR)main.exe:$(DIR)main.o $(DIR)func.og+ -o $(DIR)main.exe $(DIR)*.o$(DIR)main.o:main.cpp func.hg+ -o $(DIR)main.o -c main.cpp $(DIR)func.o:func.cpp func.hg+ -o $(DIR)func.o -c func.cpprebuild:clean $(DIR)main.execlean:rm $(DIR)*.o $(DIR)*.exe另外make内部事先定义好了一些变量,有自动变量和预定义变量:自动变量: 指在使用的时候,自动用特定的值替换。常用的有:变量说明$当前规则的目标文件$当前规则的第一个依赖文件$当前规则的所有依赖文件$?规则中日期新于目标文件的所有相关文件列表$(D)目标文件的目录名部分$(F)目标文件的文件名部分例:使用$和$进行替换(注意,这里不能对头文件进行依赖)DIR=./bin/$(DIR)main.exe:$(DIR)main.o $(DIR)func.og+ -o $ $(DIR)main.o:main.cppg+ -o $ -c $ $(DIR)func.o:func.cppg+ -o $ -c $rebuild:clean $(DIR)main.execlean:rm $(DIR)*.o $(DIR)*.exe预定义变量有些变量是make内部事先定义好的。常用的有:变量说明$(CC)C编译程序,默认值:cc$(CPP)C 预编译器的名称,默认值为 $(CC) -E$(RM)文件删除程序,默认值:”rm f”$(CPPFLAGS)传给C预处理程序第(的)标志,没有默认值$(CFLAGS)传给C编译器第(的)标志,没有默认值根据内部变量,可以将makefile改写为:DIR=./bin/OBJECTS=$(DIR)main.o $(DIR)func.oCC=g+$(DIR)main.exe:$(OBJECTS)$(CC) -o $ $(DIR)main.o:main.cpp$(CC) -o $ -c $(DIR)func.o:func.cpp$(CC) -o $ -c $ rebuild:clean $(DIR)main.execlean:rm $(DIR)*.o $(DIR)*.exe模式规则模式规则是指通用匹配方式,模式规则必须指定”%”,百分号可以匹配任何字符串,例如下面规则:%.o: %.cpp表示任何目标文件的依赖文件是与目标文件同名的并且扩展名为.cpp的文件根据模式规则,上面的makefile可改写为:DIR=./bin/OBJ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店客户投诉管理机制分析
- 2025年鲁能集团有限公司新疆新能源分公司招聘笔试模拟试题及答案详解(各地真题)
- 2024年安全员考试检测卷(夺分金卷)附答案详解
- 电子毛细管生产线项目规划设计方案
- 2025年期货从业资格之《期货法律法规》考前冲刺模拟题库带答案详解(巩固)
- 煤矸石填沟造地综合利用项目可行性研究报告
- 绿色金融政策在2025年市场中的支持体系与风险管理研究报告
- 2025年福建龙岩技师学院招聘应届生15人笔试备考题库及答案详解1套
- 2023年度文化教育职业技能鉴定试卷【真题汇编】附答案详解
- 2025广播电视编辑记者测试卷附完整答案详解(有一套)
- 宠物经济下的宠物食品包装创新研究报告:2025年市场潜力分析
- 2025年关于广告设计合同格式范本
- 临床基于MDT平台下的“5A”护理模式在改善脑卒中后顽固性呃逆患者中应用
- 基础电工安全培训课件
- 法律顾问合同协议书模板
- 2025年淮南市潘集区公开招聘社区“两委”后备干部10名考试参考试题及答案解析
- 物资采购材料管理办法
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测数学(含答案)
- 2025年教师资格之中学体育学科知识与教学能力通关试题库(有答案)
- 2025-2026学年沪教牛津版(深圳用)小学英语五年级上册教学计划及进度表
- 2025年人力资源管理人员考试薪酬福利管理模拟试卷
评论
0/150
提交评论