linux 编译器 生成.o,Linux的编译器,调试器和项目的自动化构建工具
Linux的编译器,调试器和项目的自动化构建工具1、Linux的编译器gcc&g++代码必须编译成可执行程序才可以运行gcc&g++完成四步操作1、预处理(头文件展开和宏替换)2、编译(生成汇编代码)3、汇编(生成机器指令)4、链接(生成可执行程序)命令:gcc [选项] 需要编译的文件 [选项] 生成的目标文件功能:进行程序的预处理,编译,汇编,链接操作预处理:gcc -E 需要
Linux的编译器,调试器和项目的自动化构建工具
1、Linux的编译器gcc&g++
代码必须编译成可执行程序才可以运行
gcc&g++完成四步操作
1、预处理(头文件展开和宏替换)
2、编译(生成汇编代码)
3、汇编(生成机器指令)
4、链接(生成可执行程序)
命令:
gcc [选项] 需要编译的文件 [选项] 生成的目标文件
功能:
进行程序的预处理,编译,汇编,链接操作
预处理:
gcc -E 需要预处理的文件 -o 生成的目标文件.i
1.主要包括宏替换,文件包含,条件编译,去掉注释
2、预处理处理的是#开头的代码行
编译:
命令:
gcc -S 需要预处理的文件 -o 生成的目标文件.s
1、检查错误
2、生成汇编代码
汇编:
gcc -c 需要预处理的文件 -o 生成的目标文件.o
1、将编译阶段生成的汇编代码转成目标文件
2、生成机器指令
链接:
命令:
gcc 需要预处理的文件 -o 生成的目标文件
生成可执行程序
gcc默认生成的二进制程序是动态链接的
gcc的选项参数及描述
选项
描述
-E
生成预处理.i文件
-S
生成汇编代码.s文件
-c
生成机器指令.o文件
-o
生成可执行程序
-static
使用静态链接
-g
生成调试信息
-fPIC
生成位置无关代码
-l
指定头文件路径
-L
指定链接库名称
-shared
使用动态库链接
-O0
不优化
-O1
缺省参数,表示一级优化
-O2
二级优化
-O3
三级优化
-w
不生成警告信息
-Wall
生成所有警告信息
2、Linux的调试器gdb
程序的发布方式有release版本和debug版本
Linux下使用编译器gcc&g++编译出来的程序默认是release版本
要使用gdb调试器,就必须在编译的时候加上-g选项
gdb使用的操作和描述:
操作
描述
list+行号
显示调试程序的源代码,接着上次的位置往下10行
list+函数名称
列出某个函数的代码
r或run
运行程序
n或next
单条执行
s或step
进入函数调用
b或break+行号
在某行打断点
b或break+函数名
在某个函数开头设置断点
finish
执行到当前函数返回
p或print
打印表达式的值,通过表达式可以修改变量的值或者函数调用
p+变量
打印变量的值
set var
修改变量的值
c或continue
从当前位置开始连续非单步执行
dekete breakpoints
删除所有断点
delete breakpoints n
删除编号为n的断点
disable breakpoints
禁用所有断点
enable breakpoints
启用断点
info breakpoints
查看当前设置了哪些断点
display 变量名
跟踪或查看一个变量
undisplay
取消对先前变量的追踪
util+行号
跳转到某行
bt或breaktrace
查看各级函数调用及参数
i或nfo locals
查看当前栈区的变量值
quit
结束调试
3、Linux的项目自动化构建工具Makefile
make是一个命令,用来自动化编译Makefile文件中的指令。
example:





符号
描述
$<
第一个依赖对象
$^
所有依赖对象
$@
目标对象
工作原理:
1、make会在当前目录下找Makefile文件;
2、make’将Makefile下的第一个文件作为目标文件
3、若是依赖对象不存在,则继续向下找生产依赖对象的文件,然后逐层递归向上编译
4、若是没找到,则直接报错退出
目标对象是否需要重新生成,是根据依赖对象的最后修改时间来决定的
项目的清理:
1、执行make clean指令
2、我们将需要clean的目标文件设置为伪目标,用.PHONY修饰,伪目标的特性就是,总是被执行
3、伪目标无论如何每次都要重新生成
4、Linux下git的使用
操作
描述
git clone url
clone资源到本地
git add 文件
将文件添加到刚下载好的路径下
git commit
提交改动到本地
git push
推送本地文件到GitHub服务器
GitHub配置免密提交
更多推荐




所有评论(0)