版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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-LIN
2、UX-GCC。 安装或更新GCC可在GNU项目的官方网站()下载安装包。参考资料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
5、mul(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(arg
6、c4) 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
7、 GDB调试工具 Gdb math 常用GDB命令及解释 List 列出可执行代码 Break 设置断点 Run 运行程序,遇到断点停止 Next 单步运行程序 Step 进入函数内部,查看函数内部代码执行 Delete 删除断点 Continue 从断点处继续执行 Kill 终止正在调试的程序 Print 显示变量的内容 Quit 推出GDB,2010-02,14,6.5 Make 工具及使用 当一个软件被划分为很多子系统,子系统又被划分为几个独立的模块,他们之间就会产生协调问题。例如一个模块修改了,怎样才能保证其他模块与之相关的部分也随之改变,make工具就是为了保证每次重新编译时都是最新
8、源代码。Make工具是一种工程管理软件,由其调用Makefile文件对工程进行管理,上层Makefile调用下层Makefile构成链表,对整个软件进行管理。,2010-02,15,Makefile语法格式 目标:依赖项列表 【命令】 以上面程序为例: 目标: create 依赖:createfile.c 命令: Gcc o cteate create.c Makefile create:create.c gcc o create cteate.c,2010-02,16,Makefile 中的变量 自定义变量 Makefile 的变量使用一个字符串定义的 变量名=字符串 变量的使用: $(变量
9、名) 默认变量 AR 归档维护程序的名称 CC arm-linux-gcc,2010-02,17,自动化变量 $ 代表规则中的目标文件名 $ 规则的第一个依赖文件名 $? 所有比目标文件更新的依赖文件列表 $ 规则的所有依赖文件列表,使用空格分隔 $* 不包含扩展名的目标文件名称 $+ 类似“$”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时,库的交叉引用场合,2010-02,18,伪目标 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签。指定具体的目标来执一些特定的命令。像下边那样: c
10、lean: rm 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.o gcc o math main.o math.o main.o :main.c gcc c main.c math.o: math.h math.c gcc c math.c clean: r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 视频矩阵切换装置毕业设计报告
- 出售种植大棚合同范例
- 公墓物业维修合同范例
- 小区绿化修剪标准合同范例
- 基地项目转让合同范例
- 担保租赁合同范例
- 口服液销售合同范例
- 2024年高考政治专题复习公民的政治生活提升练习题含解析
- 借机器协议合同范例
- 承包乡村酒席合同范例
- 中小学-消防安全知识教育-课件
- 2024年导游资格证基础知识考试题库(附含答案)
- 2023年中国人民银行清算总中心招聘考试真题
- 职业院校“金课”建设方案
- 新质生产力-讲解课件
- 组织行为与领导力智慧树知到期末考试答案2024年
- 30道计量员岗位常见面试问题含HR问题考察点及参考回答
- 医保基金监管知识考试题库300题(含答案)
- 校园欺凌谈话记录表
- 计算机专业生涯发展展示
- 体质测试成绩表(自动统计数据)(小学、初中)
评论
0/150
提交评论