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 冯诺依曼计算机体系结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1536651.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python数据分析案例60——扩展变量后的神经网络风速预测(tsfresh)

案例背景 时间序列的预测一直是经久不衰的实际应用和学术研究的对象,但是绝大多数的时间序列可能就没有太多的其他的变量,例如一个股票的股价,还有一个企业的用电量,人的血糖浓度等等,空气的质量,温度这些…

揭秘LLM计算数字的障碍的底层原理

LLM的 Tokenizer与数字切分 大语言模型在处理语言时,通常依赖Tokenization技术来将文本切分为可操作的单元。早期版本的Tokenizer对数字处理不够精确,常常将多个连续数字合并为一个Token。比如“13579”可能被切分为“13”、“57”和“9”。在这种情况…

【Linux修行路】网络套接字编程——UDP

目录 ⛳️推荐 前言 六、Udp Server 端代码 6.1 socket——创建套接字 6.2 bind——将套接字与一个 IP 和端口号进行绑定 6.3 recvfrom——从服务器的套接字里读取数据 6.4 sendto——向指定套接字中发送数据 6.5 绑定 ip 和端口号时的注意事项 6.5.1 云服务器禁止直接…

AIGC图片相关知识和实战经验(Flux.1,ComfyUI等等)

最近看了网上的一些新闻,flux.1火出圈了,因此自己也尝试跑了一下,作图的质量还是蛮高的,在这里做个知识总结回顾。 flux.1是什么? 根据介绍,flux.1是由stable diffusion 一作,Stability AI的核…

数据结构----栈和队列

(一)栈 1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First …

【数据结构】十大经典排序算法总结与分析

文章目录 前言1. 十大经典排序算法分类2. 相关概念3. 十大经典算法总结4. 补充内容4.1 比较排序和非比较排序的区别4.2 稳定的算法就真的稳定了吗?4.3 稳定的意义4.4 时间复杂度的补充4.5 空间复杂度补充 结语 前言 排序算法是《数据结构与算法》中最基本的算法之一…

PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码

目录 用到的工具: PHP Swoole拓展 | PHP Redis拓展 | Redis 7 一、安装上述必要工具(下面是以宝塔面板中操作为例) 给PHP安装Swoole和Redis拓展: 安装Redis软件 二、创建websocket服务器文件"wss_server.php" 具…

19 MDIO 接口读写以太网PHY寄存器

以太网概述 以太网(Ethernet)是应用最普遍的局域网技术。IEEE组织的 IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网凭借其成本低、通信速率高、抗干扰性强等优点被广泛应用在网络…

2024 RSTCONCTF re 部分wp

Unknown Architect DIE查看,RISC_V架构,直接交即可 Duke of the Kingdom 附件拖入jadx 比较简单。脚本 Keypad 附件拖入ida。一共四遍check,都比较简单 Pico-Cypher 文本编辑器打开附件 稍微问一问gpt,得知这是micropython&#x…

2024年【浙江省安全员-C证】考试试卷及浙江省安全员-C证模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 浙江省安全员-C证考试试卷是安全生产模拟考试一点通总题库中生成的一套浙江省安全员-C证模拟考试题库,安全生产模拟考试一点通上浙江省安全员-C证作业手机同步练习。2024年【浙江省安全员-C证】考试试卷及…

PostMan使用变量

环境变量 使用场景 当测试过程中,我们需要对开发环境、测试环境、生产环境进行测试 不同的环境对应着不同的服务器,那么这个时候我们就可以使用环境变量来区分它们 避免切换测试环境后,需要大量的更改接口的url地址 全局变量 使用场景 当…

[Leetcode LCR 154][Medium]-复杂链表的复制-链表

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 这道题难点在于如何处理random。因为涉及到的所有节点都在同一链表,因此可以在链表上利用复制-拆分的方法去做。 先在链表上把每个节点复制自身一次,相当于cur与cur.ne…

TCGA数据挖掘(全网最详细)

文章目录 前言一、数据处理二、数据融合3.基因ID转换4.表达差异分析5.可视化1. 筛选上下调及不显著变化的基因2.挑选top 103.火山图4. 热图4.1 上调前504.2 下调50 总结 前言 本文主要用于介绍TCGA初始数据的处理,数据融合,基因ID转换,数据融合以及数据的可视化! 一、数据处理…

评论怎么不被折叠?

首先 就很烦,即使我个人认为它很好 那么,怎么防止呢? 当然是 加代码框 //我是代码框 首先看看不加代码框 被撅了( 那加上呢 没事 所以,这功能有什么用呢

比传统机器学习更先进的深度学习神经网络的二分类建模全流程教程

比传统机器学习更先进的深度学习神经网络的二分类建模全流程分析教程 深度学习介绍和与传统机器学习的区别 深度学习(Deep Learning)是一种机器学习的分支,基于多层神经网络模型,能够自动从大量数据中学习特征并进行预测。深度学…

Linux中使用Docker构建Nginx容器完整教程

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…

幼儿与非幼儿识别系统源码分享

幼儿与非幼儿识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

初识Linux · 进程(3)

目录 前言: 进程的创建 前言: 继上文介绍了着重介绍了进程的内部属性,以及在操作系统层面进程如何被组织起来的,如何调用系统接口,有关task_struct,进程的部分理解等,今天,我们就…

书生大模型实战营学习[1]

学习目标: 完成SSH连接与端口映射并运行hello_world.py 创建conda环境 学习内容: 完成SSH连接 使用vscode实现SSH的远程连接 首先安装Remote -SSH 接着使用ssh-keygen生成密钥 在开发机平台添加SSH 进行端口映射 创建hello_world.py来验证 impor…

杨敏博士:基于法律大模型的智能法律系统

9月26日,杨敏博士受邀参加人工智能助力法治化营商环境发展论坛暨得理法律大模型发布会并发表了“基于法律大模型的智能法律系统”主题演讲。杨博士是香港大学计算机博士,担任中科院深圳先进院高性能数据挖掘实验室主任,是深圳市海外高层次人才…