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:

4af715b422af3b0ccb7974158c51af5f.png

b342ffdc7f078711effdb4444b751393.png

f062670459da0e439b31741b3a784180.png

d6c7c6e03043f1b2a73236c1547056f9.png

e9ee40044f622ea952f9a3303b1ae1f2.png

符号

描述

$<

第一个依赖对象

$^

所有依赖对象

$@

目标对象

工作原理:

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配置免密提交

Logo

一站式 AI 云服务平台

更多推荐