linux关于cmake,makefile和gdb的使用

c文件的编译

安装环境(centos 7)

检查命令是否齐全

gcc --version

g++ --version

gdb--version

安装命令

yum -y install gcc-c++安装g++命令(用于编译c/c++文件)
yum -y install gcc安装gcc命令(用于编译c文件)

每个都出现版本号,证明已经安装成功

直接生成可执行文件

gcc 文件名 -o 生成文件名

一定要将命令写对,命令参数的顺序写对

预处理

g++ -E 源文件名 生成文件名.i

1.将头文件展开

2.宏替换

3.内联函数替换

4.注释省略

5.进行条件编译,#ifdef,#ifndef,#endif 等

6.生成.i文件

编译

g++ -s 生成文件名.i -o 生成文件名.s

1.汇总函数符号生成符号表

2.扫描,语法分析,语义分析,源代码分析,目标代码生成,目标代码优化

3.生成.s文件

汇编

g++ -c 生成文件名.s -o 生成文件名.o

1.转为二进制

2.虽然汇编是转成二进制,但是也会进行相应的检查,如果有函数只定义如果没有实现就会在这里发生报错

3.生成.o文件

链接

g++ -o 可执行文件名 -o 生成文件名.o

1.将各个文件进行链接,符号表进行对应,查找各个函数的地址,生成可执行文件

2.静态链接和动态链接
如果代码没有错误,最后会成功生成可执行文件

ldd 可执行文件名查看文件的链接情况

windows linux
动态链接 .dll .so
静态链接 .lib .a

makefile

1.写入makefile文件

cpp 复制代码
mybin:main.c
	gcc -g main.c -o mybin
	
	# 两者是等价的
	# gcc -o $@ $^
	# gcc -o mybin main.c 

.PHONY:clean
clean:
	rm -r mybin

2.使用make生成文件
make命令的时间对比是和上次修改的时间做对比,如果从上次make之后没有修改就不用生成新的(前提是make命令后生成的文件存在的情况下,如果不存在也是要重新生成的)

3.使用make clean进行文件的删除

gdb调试工具

gdb的安装
gdb的启动

1.使用-g添加可调式权限
gcc -g 源文件名 -o 生成可执行文件名

2.gdb 可执行文件名进入调试界面

gdb调试命令

1.l [数字]没有数字就从main开始,有数字就从头开始

有人说我为什么只有这么点儿代码,我的代码被吃了吗?

确实和我们想的不一样
我们只需要按回车,他就能把代码全部显出来,直到最后

2.r直接运行程序

3.b [行号]在指定行打断点

运行到断点处会停下来
如果我写一个死循环,会发生什么

他不会停下来

强制退出还是在gdb中,并且会显示从哪里跳出来的

info b查看断点
d [断点编号]只能通过断点编号才能将断点进行删除

n逐过程
s逐语句(进入函数)
逐过程

逐语句


disable/enable停用断点/启用断点

在21行添加的断点,运行,强制停止运行的时候,从26行跳出,证明21行的断点已经停用
运行,启用断点,逐过程,到达23行,证明断点启用成功

c跳到下一个断点的位置

finish运行完一个函数

在21行停下来,逐语句执行,进入函数到13行,然后finish命令直接跳到函数结束,证明是将函数执行完

bt调用堆栈

进入21行函数,调用堆栈,可以看见两个函数

display 变量名,取地址常显示监视变量
undisplay [变量编号]取消常显示

常数2也是可以进行监视的,并且需要取消监视的时候,可以连续取消多个监视

until 行号直接跳到某一行

如果中间有断点还是要停下来的

从第17行直接跳到23行

set var 变量名=value强制改变某个变量的值进行调试

批量化注释和取消

1.注释
ctrl+v选中要注释的列
shift+i
//
ESC

2.取消注释
ctrl+v选中需要注释的列

使用方向键进行选择需要取消注释的列(hjkl--左,下,上,右)或者使用方向键
d

查找命令

1.查找文件
find 路径 -name 文件名

2.查找命令
which 命令(ls,pwd,cd)

3.查找安装的文档,压缩包,头文件
whereis 头文件/压缩包/下载的文档

给用户分配权限

vim /etc/sudoers

这里原本(文档的100行左右)是没有user1的,我们按照上root写的形式抄下来,将名称给改成需要分配权限的用户

相关推荐
szxinmai主板定制专家33 分钟前
【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案
运维·服务器·arm开发·人工智能·fpga开发
深科文库36 分钟前
构建 MCP 服务器:第 3 部分 — 添加提示
服务器·python·chatgpt·langchain·prompt·aigc·agi
点击查询36 分钟前
怎么把自己电脑设置成服务器?
运维·服务器
阿里云大数据AI技术1 小时前
ES Serverless 8.17王牌发布:向量检索「火力全开」,智能扩缩「秒级响应」!
大数据·运维·serverless
yzx9910131 小时前
Linux 系统中的算法技巧与性能优化
linux·算法·性能优化
fengyehongWorld1 小时前
Linux Docker的简介
linux·docker
wanhengidc1 小时前
服务器中日志分析的作用都有哪些
运维·服务器
Mikhail_G1 小时前
Python应用变量与数据类型
大数据·运维·开发语言·python·数据分析
曹瑞曹瑞1 小时前
VMware导入vmdk文件
linux·运维·服务器
Johny_Zhao1 小时前
2025年6月Docker镜像加速失效终极解决方案
linux·网络·网络安全·docker·信息安全·kubernetes·云计算·containerd·yum源·系统运维