Linux基础3-基础工具3(make,makefile,gdb详解)

上篇文章:Linux基础3-基础工具2(vim详解,gcc详解)-CSDN博客

本章重点:

1.自动化构建工具make,makefile

2.linux调试工具gdb

目录

一. 自动化构建工具make,makefile

1.1 make使用

1.2 使用make注意点

a. make和文件时间属性之间关系

b. make默认只会执行第一条文件,然后停止

c. makefile的推导规则(类似于栈结构,新进后出)

二. gdb 

        2.1 gdb调试和windows调试(vs2022)

        2.2 创建debug版本文件

2.3 gdb命令使用

三. 下章重点

3.1 git的使用

3.2 冯诺依曼计算机体系结构


一. 自动化构建工具make,makefile

make是一个命令,makefile是一个文件,也可命名为Makefile

当我们创建好makefile后,输入make 即可完成相应的工作

如帮我们完成编译,清理等工作

1.1 make使用

1.1 创建makefile和代码文件

1.2 完成代码文件

1.3 完成makefile文件

.PHONY(上图输入错了,不应该是.PHONE,而是PHONY)

该关键字修饰的是伪目标(表示该目标总是可以被执行的)

1.2 使用make注意点

a. make和文件时间属性之间关系

当我们make一次之后,不删除文件再次使用make,会显示test是最新的

gcc是如何知道我们不需要再次编译呢?(这个跟文件的时间属性有关,gcc会比较源文件和可执行文件的modify时间,如果时间不一样,就能够再次make。)

如:

在我们学习指令的时候,使用stat可以显示文件的三种时间:文件时间

Access time(最后一次访问时间):

Linux老内核,访问,读取文件频率很高,这样会频繁更新Access time,导致效率低

Linux新内核,只有经过一定次数的访问才会进行修改Access time

Modify time(最后一次修改文件时间):

Change time(最后一次修改文件属性时间):

所以当我们touch一下源文件(修改文件属性,不修改内容),就能够再次make

但是被 .PHONY修饰的文件,不遵守上述时间规则

b. make默认只会执行第一条文件,然后停止

        这就是为什么,编译文件test.c直接make就行,而使用clean需要make clean

c. makefile的推导规则(类似于栈结构,新进后出)

gcc,依赖关系表

mycode依赖mycode.o,但是没有mycode.o

所以去执行mycode.o的依赖关系和依赖方法

最终按照依赖关系列表先执行mycode.i的依赖关系和依赖方法

二. gdb 

        2.1 gdb调试和windows调试(vs2022)

两种调试的思路上是一摸一样的,但是gdb调试是通过命名行的方法进行的,这需要我们掌握gdb调试的各种操作

        2.2 创建debug版本文件

gdb调试的时候,默认情况下是无法调试的。需要gcc编译时候加上 -g 生成debug文件才能调试

gcc test.c -o test -g    //生成debug文件

debug版本:供程序员进行调试,增加调试信息

release版本:用户使用,不需要增加调试信息

在Linux中,gcc默认生成的版本是release版本,无法进行调试

举例:

为什么会存在debug和release两种版本呢?

        程序员在开发软件的过程中需要进行调试,而用户不需要调试,用户只关心如何使用软件。

而且relese版本体积小于debug版本,也方便用户下载和存储

2.3 gdb命令使用

list l        查看代码(输入行号可以查看某一行代码,输入enter可以继续查看后续代码)

b + 行号 可以在这一行打断点

d + 行号 可以在这一行关闭断点

info + b  可以查看所有断点

r 调试运行(相当于shift+f5)

n 逐过程运行(f10)(遇到函数不会进入函数内部,而是直接运行完这条函数)

s 逐语句运行(f11)(遇到函数会进入函数内部)

c 由一个断点运行到下一个断点

finsh 直接运行到该函数运行完

bt 查看调用堆栈

p 变量 可以查看相应变量的值

display/undisplay 可以常显示/取消该变量

until + 行号 可以直接运行到这一行

三. 下章重点

3.1 git的使用

3.2 冯诺依曼计算机体系结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子真甜~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值