GCC编译器及Make工具.ppt

上传人:wuy****n92 文档编号:70272429 上传时间:2023-01-18 格式:PPT 页数:21 大小:323.49KB
返回 下载 相关 举报
GCC编译器及Make工具.ppt_第1页
第1页 / 共21页
GCC编译器及Make工具.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《GCC编译器及Make工具.ppt》由会员分享,可在线阅读,更多相关《GCC编译器及Make工具.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Linux Linux 操作系统操作系统本章目录本章目录第六节第六节GCC编译器及编译器及Make工具工具6.1、GCC简介简介6.2、GCC编译过程编译过程6.3、GCC参数参数6.4、GDB调试工具调试工具6.5、make工具及使用工具及使用2010-022目标目标n了解了解GCC编译器的升级及安装编译器的升级及安装n掌握掌握GCC编译器编译过程编译器编译过程n掌握掌握GCC编译器编译选项编译器编译选项n掌握掌握GDB调试器调试命令调试器调试命令n掌握掌握Make工具用法工具用法n掌握掌握Makefile文件编写规则文件编写规则2010-023p6.1、GCC简介简介nGCC是是GNU项目

2、中的一个子项目,项目中的一个子项目,GCC能编能编译译C、C+ObjectC和和Java等多种语言,而且还等多种语言,而且还可执行跨平台的交叉编译工作,比如用于可执行跨平台的交叉编译工作,比如用于ARM处理处理器的器的ARM-LINUX-GCC。n安装或更新安装或更新GCC可在可在GNU项目的官方网站(项目的官方网站()下载下载安装包。参考资料安装包。参考资料linux上的上的C编程编程2010-024p6.2GCC编译过程编译过程n编译过程一般可以分为下面四个阶段,预处理、编编译过程一般可以分为下面四个阶段,预处理、编译、汇编、链接。每个阶段分别调用不同的工具进译、汇编、链接。每个阶段分别调

3、用不同的工具进行处理,见下图:行处理,见下图:源代码源代码.C预处理预处理cpp程序Gcc调用编译编译汇编汇编链接链接ccl程序Gcc调用as程序Gcc调用ld程序Gcc调用库库可执行文件可执行文件2010-025p6.3GCC参数参数nGCC可以通过选项对程序的生成进行全面控制。可以通过选项对程序的生成进行全面控制。nGCC参数:参数:l-ofile编译生成可执行文件编译生成可执行文件filel-c仅对文件进行编译,不链接,生成目标文件仅对文件进行编译,不链接,生成目标文件.ol-g在可执行文件中添加调试信息,供在可执行文件中添加调试信息,供GDB调试调试l-E只进行预编译只进行预编译l-l

4、在链接时链接指定库文件在链接时链接指定库文件l-I增加头文件目录,并优先于默认头文件目录增加头文件目录,并优先于默认头文件目录l-v显示显示GCC版本信息版本信息lHello.clGccgchello.clhello.olGccgohellolmylib.aIhello.hhello.c2010-026n实例实例1:创建一个文件:创建一个文件l#includelintmain(intargc,char*argv)llFILE*fp;lif(argc2)llfp=fopen(argv1,”w”);lfclose(fp);llreturn0;l2010-027l保存文件名为保存文件名为create

5、file.cl生成可执行文件生成可执行文件gccocreatecreatefile.cl执行文件执行文件create创建文件创建文件test.txtl./createtest.txtn实例实例2:l按照模块化设计思想,设计程序进行按照模块化设计思想,设计程序进行2个数的加、减、乘、个数的加、减、乘、除,逻辑或、逻辑与、逻辑非。除,逻辑或、逻辑与、逻辑非。l提示:创建提示:创建main.c进行主逻辑关系,进行主逻辑关系,math.c,math.h创建数学计算函数创建数学计算函数l例如:计算例如:计算2和和3的和:的和:./matha23,a表示表示addl计算计算2和和3的差:的差:maths2

6、32010-028p程序设计程序设计nmath.hlintadd(inta,intb);lintsub(inta,intb);llongmul(inta,intb);lintdiv(inta,intb);nmath.cintadd(inta,intb)Returna+b;2010-029intsub(inta,intb)Returna-b;longmul(inta,intb)Returna*b;intdiv(inta,intb)Returna/b;2010-0210nmain.c#include#include“math.h”intmain(intargc,char*argv)intdate1

7、=0;intdate2=0;if(argc4)printf(“usage:n”);printf(“命令命令选项选项操作数操作数1操作数操作数2n”);return0;date1=atio(argv2);date2=atio(argv3);2010-0211if(!strcmp(argv1,”-a)printf(“%d+%d=%dn”,date1,date2,add(date1,date2);if(!strcmp(argv1,”-s)printf(“%d-%d=%dn”,date1,date2,sub(date1,date2);.Gccomathmain.cmath.cmath.h2010-02

8、12p6.4GDB调试工具调试工具pGdbmathn常用常用GDB命令及解释命令及解释lList列出可执行代码列出可执行代码lBreak设置断点设置断点lRun运行程序,遇到断点停止运行程序,遇到断点停止lNext单步运行程序单步运行程序lStep进入函数内部,查看函数内部代码执行进入函数内部,查看函数内部代码执行lDelete删除断点删除断点lContinue从断点处继续执行从断点处继续执行lKill终止正在调试的程序终止正在调试的程序lPrint显示变量的内容显示变量的内容lQuit推出推出GDB2010-0213p6.5Make工具及使用工具及使用n当一个软件被划分为很多子系统,子系统又

9、被划分为几个独立当一个软件被划分为很多子系统,子系统又被划分为几个独立的模块,他们之间就会产生协调问题。例如一个模块修改了,的模块,他们之间就会产生协调问题。例如一个模块修改了,怎样才能保证其他模块与之相关的部分也随之改变,怎样才能保证其他模块与之相关的部分也随之改变,make工工具就是为了保证每次重新编译时都是最新源代码。具就是为了保证每次重新编译时都是最新源代码。Make工具工具是一种工程管理软件,由其调用是一种工程管理软件,由其调用Makefile文件对工程进行管文件对工程进行管理,上层理,上层Makefile调用下层调用下层Makefile构成链表,对整个软构成链表,对整个软件进行管理

10、。件进行管理。2010-0214nMakefile语法格式语法格式l目标:依赖项列表目标:依赖项列表【命令】【命令】l以上面程序为例:以上面程序为例:l目标:目标:createl依赖:依赖:createfile.cl命令:命令:Gccocteatecreate.clMakefilecreate:create.cgccocreatecteate.c2010-0215pMakefile中的变量中的变量n自定义变量自定义变量lMakefile的变量使用一个字符串定义的的变量使用一个字符串定义的变量名变量名=字符串字符串l变量的使用:变量的使用:$(变量名)变量名)n默认变量默认变量lAR归档维护程序

11、的名称归档维护程序的名称lCCarm-linux-gcc2010-0216n自动化变量自动化变量l$代表规则中的目标文件名代表规则中的目标文件名l$规则的第一个依赖文件名规则的第一个依赖文件名l$?所有比目标文件更新的依赖文件列表所有比目标文件更新的依赖文件列表l$规则的所有依赖文件列表,使用空格分隔规则的所有依赖文件列表,使用空格分隔l$*不包含扩展名的目标文件名称不包含扩展名的目标文件名称l$+类似类似“$”,但是它保留了依赖文件中重复出现的文,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时,库的交叉引用场合件。主要用在程序链接时,库的交叉引用场合2010-0217n伪目标伪目标

12、l伪目标是这样一个目标:它不代表一个真正的文件名,在伪目标是这样一个目标:它不代表一个真正的文件名,在执行执行make时可以指定这个目标来执行其所在规则定义的时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。指定具体命令,有时我们也可以将一个伪目标称为标签。指定具体的目标来执一些特定的命令。像下边那样:的目标来执一些特定的命令。像下边那样:clean:rm rf*.o规则中规则中“rm”不是创建文件不是创建文件“clean”的命令,只是删除的命令,只是删除当前目录下的所有当前目录下的所有.o文件。在工作目录下不存在文件。在工作目录下不存在“clean”这个文件时

13、,我们输入这个文件时,我们输入“makeclean”后,后,“rm*.o”总总会被执行。会被执行。同样,由于没有任何其他规则依赖伪目标,因此在执行同样,由于没有任何其他规则依赖伪目标,因此在执行make时这条规则不会不执行时这条规则不会不执行2010-0218n条件语句条件语句lIfeqelseendifl例如:例如:lifeq($(ARCH),arm)lCROSS_COMPILE=arm-linux-lendif2010-0219p实例实例2makefile编写:编写:math:main.omath.ogccomathmain.omath.omain.o:main.cgcccmain.cmath.o:math.hmath.cgcccmath.cclean:rmf*.o2010-0220l现在变量把前面的现在变量把前面的Makefile重写一遍:重写一遍:OBJS=main.omath.oCC=gccmath:$OBJS$CCo$?main.o:main.c$CCc$?math.o:math.cmath.h$CCc$?clean:rmf*.o2010-0221

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁