目录
二、Linux项目自动化构建工具-make/Makefile
一、Linux编辑器-gcc/g++使用
1、背景知识
·预处理
·编译(生成汇编)
·汇编(生成机器可识别代码)
·链接(生成可执行文件或库文件)
2、gcc如何完成
(1)预处理
·预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
·预处理指令是以#开头的代码行
·实例:gcc -E test.c -o test.i
·选项"-E",该选项的作用是让gcc在预处理结束后停止编译过程
·选项"-o"是指目标文件,".i"文件为已经经过预处理的C原始程序
(2)编译(生成汇编)
·在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言
·用户可以使用"-S"选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码
·实例:gcc -S test.i -o test.s
(3)汇编(生成机器可识别代码)
·汇编阶段是把编译阶段生成的".s"文件转成目标文件
·使用"-c"就可看到汇编代码已转化为".o"的二进制目标代码
·实例:gcc -c test.s -o test.o
(4)链接(生成可执行文件或库文件)
·在成功编译后,就进入了链接阶段
·实例:gcc test.o -o test
3、gcc选项
·-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
·-S 编译到汇编语言不进行汇编和链接
·-c编译到目标代码
·-o文件输出到文件
·-static 此选项对生成的文件采用静态链接
·-g生成调试信息。
·-shared 此选项将尽量使用动态库,所生成文件较小,但需要系统有动态库
·-O0
·-O1
·-O2
·-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
·-w不生成任何警告信息
·-Wall 生成所有警告信息
二、Linux项目自动化构建工具-make/Makefile
1、背景
·一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
·Makefile的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大提高了软件开发效率
·make是一个命令工具,是一个解释Makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令
·make是一条命令,Makefile是一个文件,两个搭配使用,完成项目自动化构建
2、项目清理
·工程是需要被清理的,像clean这种,没有被第一个目标文件直接关联,那么它后面所定义的命令将不会被执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重新编译。
·但是一般我们这种clean的目标文件,我们将它设置为伪目标,用.PHONY修饰,伪目标的特性是,总是被执行的。
三、Linux调试器-gdb的使用
1、背景
·程序的发布方式有两种,debug和release两种
·Linux gcc/g++出来的二进制程序,默认是release模式
·要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项
2、具体使用
要使用gdb首先要有一个可调试的代码
以如下代码为例。
首先gdb+可执行文件进入gdb,ctrl + d或q退出调试
(1)list/l 行号:显示源代码,接着上次的位置向下列,每次列10行
(2)r或者run:运行程序。如果没有断点就直接运行结束
(3)b 行号:在某一行设置断点
(4)info b:查看断点信息
(5)d 断点编号:删除断点,断点标号可以通过info b查看
(6)n或next:带条执行
(7)p 变量:打印变量值
(8)s或step:进入函数调用
(9)bt:查看各级函数调用及参数
(10) finfish:执行到当前函数返回,然后停下来等待命令
(11)display 变量名:跟踪查看一个变量,每次停下来都显示它的值
(12)undisplay:取消对先前设置的那些变量的跟踪
(13)until x行号:跳至x行
(14)continue或c:从当前位置开始连续而非单步执行程序,运行至下一个断点处停下来
(15)disable 断点编号:禁用断点
(16)enable 断点编号:启用断点