GCC编译器及Make工具.ppt_第1页
GCC编译器及Make工具.ppt_第2页
GCC编译器及Make工具.ppt_第3页
GCC编译器及Make工具.ppt_第4页
GCC编译器及Make工具.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux操作系统,2010-02,2,本章目录,第六节GCC编译器及Make工具6.1、GCC简介6.2、GCC编译过程6.3、GCC参数6.4、GDB调试工具6.5、make工具及使用,2010-02,3,目标,了解GCC编译器的升级及安装掌握GCC编译器编译过程掌握GCC编译器编译选项掌握GDB调试器调试命令掌握Make工具用法掌握Makefile文件编写规则,2010-02,4,6.1、GCC简介GCC是GNU项目中的一个子项目,GCC能编译C、C+ObjectC和Java等多种语言,而且还可执行跨平台的交叉编译工作,比如用于ARM处理器的ARM-LINUX-GCC。安装或更新GCC可在GNU项目的官方网站()下载安装包。参考资料linux上的C编程,2010-02,5,6.2GCC编译过程编译过程一般可以分为下面四个阶段,预处理、编译、汇编、链接。每个阶段分别调用不同的工具进行处理,见下图:,源代码.C,预处理,cpp程序,Gcc调用,编译,汇编,链接,ccl程序,Gcc调用,as程序,Gcc调用,ld程序,Gcc调用,库,可执行文件,2010-02,6,6.3GCC参数GCC可以通过选项对程序的生成进行全面控制。GCC参数:-ofile编译生成可执行文件file-c仅对文件进行编译,不链接,生成目标文件.o-g在可执行文件中添加调试信息,供GDB调试-E只进行预编译-l在链接时链接指定库文件-I增加头文件目录,并优先于默认头文件目录-v显示GCC版本信息Hello.cGccgchello.chello.oGccgohellolmylib.aIhello.hhello.c,2010-02,7,实例1:创建一个文件#includeintmain(intargc,char*argv)FILE*fp;if(argc2)fp=fopen(argv1,”w”);fclose(fp);return0;,2010-02,8,保存文件名为createfile.c生成可执行文件gccocreatecreatefile.c执行文件create创建文件test.txt./createtest.txt实例2:按照模块化设计思想,设计程序进行2个数的加、减、乘、除,逻辑或、逻辑与、逻辑非。提示:创建main.c进行主逻辑关系,math.c,math.h创建数学计算函数例如:计算2和3的和:./matha23,a表示add计算2和3的差:maths23,2010-02,9,程序设计math.hintadd(inta,intb);intsub(inta,intb);longmul(inta,intb);intdiv(inta,intb);math.cintadd(inta,intb)Returna+b;,2010-02,10,intsub(inta,intb)Returna-b;longmul(inta,intb)Returna*b;intdiv(inta,intb)Returna/b;,2010-02,11,main.c#include#include“math.h”intmain(intargc,char*argv)intdate1=0;intdate2=0;if(argc4)printf(“usage:n”);printf(“命令选项操作数1操作数2n”);return0;date1=atio(argv2);date2=atio(argv3);,2010-02,12,if(!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.h,2010-02,13,6.4GDB调试工具Gdbmath常用GDB命令及解释List列出可执行代码Break设置断点Run运行程序,遇到断点停止Next单步运行程序Step进入函数内部,查看函数内部代码执行Delete删除断点Continue从断点处继续执行Kill终止正在调试的程序Print显示变量的内容Quit推出GDB,2010-02,14,6.5Make工具及使用当一个软件被划分为很多子系统,子系统又被划分为几个独立的模块,他们之间就会产生协调问题。例如一个模块修改了,怎样才能保证其他模块与之相关的部分也随之改变,make工具就是为了保证每次重新编译时都是最新源代码。Make工具是一种工程管理软件,由其调用Makefile文件对工程进行管理,上层Makefile调用下层Makefile构成链表,对整个软件进行管理。,2010-02,15,Makefile语法格式目标:依赖项列表【命令】以上面程序为例:目标:create依赖:createfile.c命令:Gccocteatecreate.cMakefilecreate:create.cgccocreatecteate.c,2010-02,16,Makefile中的变量自定义变量Makefile的变量使用一个字符串定义的变量名=字符串变量的使用:$(变量名)默认变量AR归档维护程序的名称CCarm-linux-gcc,2010-02,17,自动化变量$代表规则中的目标文件名$规则的第一个依赖文件名$?所有比目标文件更新的依赖文件列表$规则的所有依赖文件列表,使用空格分隔$*不包含扩展名的目标文件名称$+类似“$”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时,库的交叉引用场合,2010-02,18,伪目标伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。指定具体的目标来执一些特定的命令。像下边那样:clean:rmrf*.o规则中“rm”不是创建文件“clean”的命令,只是删除当前目录下的所有.o文件。在工作目录下不存在“clean”这个文件时,我们输入“makeclean”后,“rm*.o”总会被执行。同样,由于没有任何其他规则依赖伪目标,因此在执行make时这条规则不会不执行,2010-02,19,条件语句Ifeqelseendif例如:ifeq($(ARCH),arm)CROSS_COMPILE=arm-linux-endif,2010-02,20,实例2makefile编写:math:main.omath.ogccomathmain.omath.omain.o:main.cgcccmain.cmath.o:math.hmath.cgccc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论