GCC编译器及Make工具 课件(新)

上传人:woxinch****an2018 文档编号:57101831 上传时间:2018-10-18 格式:PPT 页数:21 大小:237.50KB
返回 下载 相关 举报
GCC编译器及Make工具 课件(新)_第1页
第1页 / 共21页
GCC编译器及Make工具 课件(新)_第2页
第2页 / 共21页
GCC编译器及Make工具 课件(新)_第3页
第3页 / 共21页
GCC编译器及Make工具 课件(新)_第4页
第4页 / 共21页
GCC编译器及Make工具 课件(新)_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《GCC编译器及Make工具 课件(新)》由会员分享,可在线阅读,更多相关《GCC编译器及Make工具 课件(新)(21页珍藏版)》请在金锄头文库上搜索。

1、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+Object C和Java等多种语言,而且还可执行跨平台的交叉编译工作,比如用于ARM处理器的ARM-LINUX-

2、GCC。 安装或更新GCC可在GNU项目的官方网站(www.gnu.org)下载安装包。参考资料linux上的C编程,2010-02,,5,6.2 GCC编译过程 编译过程一般可以分为下面四个阶段,预处理、编译、汇编、链接。每个阶段分别调用不同的工具进行处理,见下图:,源代码.C,预处理,cpp程序,Gcc调用,编译,汇编,链接,ccl程序,Gcc调用,as程序,Gcc调用,ld程序,Gcc调用,库,可执行文件,2010-02,,6,6.3 GCC参数 GCC可以通过选项对程序的生成进行全面控制。 GCC参数: -o file 编译生成可执行文件file -c 仅对文件进行编译,不链接,生成目

3、标文件.o -g 在可执行文件中添加调试信息,供GDB调试 -E 只进行预编译 -l 在链接时链接指定库文件 -I 增加头文件目录,并优先于默认头文件目录 -v 显示GCC版本信息 Hello.c Gcc g c hello.c hello.o Gcc g o hello lmylib.a Ihello.h hello.c,2010-02,,7,实例1:创建一个文件 #include int main(int argc,char *argv) FILE *fp;if(argc2)fp=fopen(argv1,”w”);fclose(fp);return 0; ,2010-02,,8,保存文件名

4、为createfile.c 生成可执行文件gcc o create createfile.c 执行文件create创建文件test.txt ./create test.txt 实例2: 按照模块化设计思想,设计程序进行2个数的加、减、乘、除,逻辑或、逻辑与、逻辑非。 提示:创建main.c进行主逻辑关系,math.c,math.h创建数学计算函数 例如:计算2和3的和:./math a 2 3,a表示add 计算2和3的差:math s 2 3,2010-02,,9,程序设计 math.h int add(int a,int b); int sub(int a,int b); long mul

5、(int a,int b); int div(int a,int b); math.c int add(int a,int b) Return a+b; ,2010-02,,10,int sub(int a,int b) Return a-b; long mul(int a,int b) Return a*b; int div(int a,int b) Return a/b; ,2010-02,,11,main.c #include #include “math.h” int main(int argc,char *argv) int date1=0;int date2=0;if(argc4)

6、printf(“usage:n”);printf(“命令 选项 操作数1 操作数2n”);return 0;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); Gcc o math main.c math.c math.h,2010-02,,13,6.4 GDB调试工具

7、 Gdb math常用GDB命令及解释 List 列出可执行代码 Break 设置断点 Run 运行程序,遇到断点停止 Next 单步运行程序 Step 进入函数内部,查看函数内部代码执行 Delete 删除断点 Continue 从断点处继续执行 Kill 终止正在调试的程序 Print 显示变量的内容 Quit 推出GDB,2010-02,,14,6.5 Make 工具及使用 当一个软件被划分为很多子系统,子系统又被划分为几个独立的模块,他们之间就会产生协调问题。例如一个模块修改了,怎样才能保证其他模块与之相关的部分也随之改变,make工具就是为了保证每次重新编译时都是最新源代码。Make

8、工具是一种工程管理软件,由其调用Makefile文件对工程进行管理,上层Makefile调用下层Makefile构成链表,对整个软件进行管理。,2010-02,,15,Makefile语法格式 目标:依赖项列表【命令】 以上面程序为例: 目标: create 依赖:createfile.c 命令: Gcc o cteate create.c Makefilecreate:create.cgcc o create cteate.c,2010-02,,16,Makefile 中的变量 自定义变量 Makefile 的变量使用一个字符串定义的 变量名=字符串 变量的使用: $(变量名) 默认变量 A

9、R 归档维护程序的名称 CC arm-linux-gcc,2010-02,,17,自动化变量 $ 代表规则中的目标文件名 $ 规则的第一个依赖文件名 $? 所有比目标文件更新的依赖文件列表 $ 规则的所有依赖文件列表,使用空格分隔 $* 不包含扩展名的目标文件名称 $+ 类似“$”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时,库的交叉引用场合,2010-02,,18,伪目标 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。指定具体的目标来执一些特定的命令。像下边那样: clean: r

10、m rf *.o规则中“rm”不是创建文件“clean”的命令,只是删除当前目录下的所有.o文件。在工作目录下不存在“clean”这个文件时,我们输入“make clean”后,“rm *.o”总会被执行。同样,由于没有任何其他规则依赖伪目标,因此在执行make时这条规则不会不执行,2010-02,,19,条件语句 Ifeqelseendif 例如: ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- endif,2010-02,,20,实例2makefile编写:math:main.o math.ogcc o math main.o math.omain.o :main.cgcc c main.cmath.o: math.h math.cgcc c math.cclean:rm f *.o,2010-02,,21,现在变量把前面的Makefile重写一遍:OBJS=main.o math.oCC=gccmath:$ OBJS $ CC o $ $?main.o:main.c$ CC c $?math.o:math.c math.h$ CC c $?clean:rm f *.o,

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

当前位置:首页 > 中学教育 > 高中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号