Linux 基础环境的开发工具以及使用(下)

1. make / Makefile 自动化构建的工具
1)引入
在我们进行一些大型的工程的时候,代码量是极其大,当我们代码在进行一系列的编译的时候,难免会出现一些错误,当我们对错误进行一系列的更改之后,难道我们需要再重新敲刚刚一系列的相关指令吗?? 假设我们有上百个源代码,每一个都需要重新敲入相关的指令吗?? 这难免比较耗时。那有没有一些工具,可以进行对文件的相关编译原则,我们只需要输入指定的简短的指令,来完成对上百个源代码的编译。
make/Makefile 就是一个解决上述问题的自动化工具。
make:是一条指令。
Makefile: 是一个包含一系列编译原则的文件。通过调用make 指令来完成指定文件的编译。他用
于告诉 make 程序如何编译和链接一个程序。它包含了目标(target)、依赖关系
(dependencies)、命令(commands)等内容,使得我们可以通过简单的命令来构建和管理复杂
的软件项目。
2)使用
I)首先创建一个 makefile / Makefile 文件
touch makefile/Makefile
II) Makefile 里面的内容:存放依赖的 关系以及依赖方法

对指定文件进行预编译,编译,汇编,链接对应的指令 ,这里不再一一赘述,可见上篇博客文件编译对应的指定指令
III)在命令提示符里面直接使用meke 指令,就可以自动化完成指定文件的 编译。

注意:make 指令会自动推导对应的依赖关系,他的推导过程是一种栈式推导的;
一旦生成对应的第一个目标文件,此时就会停下来,其他 的对应目标文件不会生成,在默认的情
况下。也可以使用 make + 指定的目标文件
3)相关问题
I) 为什么多次进行 make 的时候,显示以下的提示信息:该目标文件已经是最新的

分析:其实每次在进行 make 指令进行编译的时候,通过对比目标文件与源文件之间的“新旧” 时间,来决定是否再次执行make 指令。
II) 为什么会这样进行执行???

为了提高编译的效率。
一般情况下:首次进行编译的时候,目标文件是新于 源文件的,因为先有源文件,才有了对应的
目标文件(注意:这里的目标文件不仅仅指的是,汇编生成的目标文件,也可能是可执行文件或者
是预编译,编译生成对应的目标文件)。
当我们没有对源文件进行相应的修改,此时源文件是老于 目标文件的,假设当前make 指令会再
次生效,当源文件的体积很大时候,在进行编译的时候,会消耗大量的时间,所以为了提高编译
的效率,当源文件老于 目标文件的时候,不会再次执行make 指令。
本质:看源文件的内容是否发生变化,来决定是否再次进行make 指令的执行
4)对上面 的问题进行验证
编译器是如何知道当前的源文件的时间是 老于,还是新于 目标文件的呢???
首先需要知道几个时间:
access:记录对文件访问的时间
modify: 记录对文件内容的修改时间
change:记录对文件的属性修改时间
I) 查看一个文件的访问,修改,时间:stat

此时目标文件是新于 源文件的,所以当我们再次执行 make 的时候初出现以下的现象:

当我们对源文件进行修改的时候(对文件的内容或者是文件的属性进行修改),所见现象如下:

5)伪目标: .PHONY 的使用
当我们想 每次使用 make 的时候,都强制执行文件的编译,此时可以使用伪目标 .PHONY
对要生成的目标文件进行 .PHONY 伪目标的修饰

但是一般不建议这样写,因为对于目标文件要是每次 make 的时候,都进行编译,这样不仅仅会消耗时间还极其销毁内存。但是对于文件的清理,可以使用 伪目标进行修饰。
2) make clean :文件清理

使用:直接在命令提示符使用 make clean

2. git
1)git 是什么
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
使用git 也可以进行团队合作。
git 的工作流程:
从远程仓库中克隆 Git 资源作为本地仓库;
从本地仓库中checkout代码然后进行代码修改;
在提交本地仓库前先将代码提交到暂存区;
提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
在需要和团队成员共享代码时,可以将修改代码push到远程仓库。

2)git 的使用
I) 首先我们需要先创建一个远程仓库,具体实现细节见下:

II) 把远程仓库拉取下来:先复制远程仓库的地址,具体实现细节见下

III)在命令行提示里面输入一下指令:
![]()
IIII) git 三板斧
git add + 指定的文件
git commit -m "关键 的文字说明"
git push :注意在这一步,会进行身份验证,输入git 的账号以及对应的密码即可

以上只是对git 的简单介绍,感兴趣的铁汁们,可以自行资料的搜集
3 . gdb 调试器的使用
1)引入
众所周知,Linux 是一个非图形化界面的操作系统(也支持图形化界面),在上面可以使用命令行的方式进行文件的创建,代码的编写,软件的下载…… 但是当我们的代码在进行运行的时候难免会遇到一些Bug ,此时又是如何调试的???
我们知道对于VS 下,进行代码的调试,有相关的按键支持,对于Linux 系统上,也是可以的,只不过这里是命令行的方式。
首先我们需要先下载 gdb 这个调试器。
sudo yum install -y gdb
gdb 是一个开发环境必不可少的调试工具。
2) Debug 和 Release 版本区别
当我们使用VS 进行代码运行的时候,多数是在 Debug 版本下进行的,方面我们进行相关的调试
简言之:Debug 版本,进行程序的调试。

对于测试人员:当我们把写好的项目进行终版的提交,他们会在 Release 版本下进行,主要
是发下各种问题,此时代码里面是不包调试信息的,也就是用户最终拿到的版本
3)Linux 下的gdb 相关的指令
I) 准备工作 :编一个测试代码

makefile 文件的内容:

gcc 默认进行文件编译采用的是版本是Debug ,当我们指定进行Debug 版本进行相关信息的调试 的
时候对应 的指令:对可执行程序进行编译的 时候,添加 -g :进行debug 版本编译

2)对指定程序进行调试 gdb + 可执行程序(注意这里 必须是可执行程序的文件)

如何判断当前的可执行程序到底是Debug 版本下生成的还是 Release 版本生成的???

通过比较对应生成文件的大小:因为Debug 版本生成的文件,对应体积较大,因为需要包含一些
对应 的调试信息。
注意:gcc/g++ 编译生成对应的文件默认是以 release 版本发布的;想对知道程序进行调试 的时
候,必须借助 Debug 版本生成的程序:在编译的时候指定 -g
当我们进入gdb 模式下,我们是无法知道当前代码的内容,此时可以借助 l 指令进行相关内容查找
l + n :查看当前代码指定的多少行,一般方便我们进行相关断点设置
l 0 和 l 1 打印出来的内容是一样的



当我们有了相关的内容,接下来就是如何进行打断点
b +指定的行号(源代码对应的某一行)

有了断点的设置,接下来就是如何查看已经打的断点???
info b

直接输入 info 的时候,默认是把所有的调试信息打印出来,如今我们只需要知道当前的 断点信息直接 info b

断点的删除:
d + 要删除断点对应的编号 对指定端点的删除
d breakpoints :删除所有 的断点

假设当前需要删除代码第7行对应的断点,此时就需要找到当前断点对应的编号: 3


程序的运行与调试:
r :遇到断点会停下来,相当于VS下的 F5

逐过程 和逐语句的调试:
n :逐过程的调试,一般用于对函数的调试,相当于VS 下的 F10
s: 逐语句的调试,一个语句一个语句的调试,相当于VS 下的F11

当我们进入函数内部,发现这个执行的过程比较长,并且也不是出发报错的位置,想直接把
该函数运行完,返回调用该函数的位置:直接使用 finish 指令即可

对变量的打印和追踪:
p + 变量名 : 显示变量的值
display + 变量名 : 每次运行完,都会打印一个当前变量对应的数值

对一个循环很长的代码块,此时一个一个指令的显示比较麻烦,可以使用diaplsy 进行追踪,此时
每执行一次循环,会自动打印变量的数值:

当不需要对某个变量进行实时的跟踪的时候,使用undislay 进行设置。



以上是关于Linux 相关工具使用的简单介绍,后期会不定期的进行内容法更新~~~

相关文章:
Linux 基础环境的开发工具以及使用(下)
1. make / Makefile 自动化构建的工具 1)引入 在我们进行一些大型的工程的时候,代码量是极其大,当我们代码在进行一系列的编译的时候,难免会出现一些错误,当我们对错误进行一系列的更改之后,难道我们需要…...
constexpr、const和 #define 的比较
constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义:constexpr用于定义在编译期可求值的常量表达式。示例:constexpr int x 5;这里,x的值在编译期就确定为5。 const 定义:const表示变量在运行期间不能被修改&…...
期末复习-Hadoop综合复习
说明 以下内容仅供参考,提到不代表考到,请结合实际情况自己复习 目录 说明 一、题型及分值 二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群 案例 1:Hadoop 基础集群部署 案例 2:Hadoop HA 集群部署 案例 3ÿ…...
禁用SAP Hana错误密码锁定用户功能
背景 公司项目适配多种数据库其中包含SAP Hana,由于有同事的数据库连接工具保存了某个在用的数据库的旧密码,导致时不时会被锁用户。通过查询官方文档已解决,这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...
Ubuntu 22.04加Windows AD域
说明: Ubuntu 22.04系统通过realmd,sssd加入到 Active Directory 域,并为域用户配置sudo权限。同时为方便用户使用为Ubuntu系统安装wps与sogou中文输入法。 1. Ubuntu 22.04加入Windows AD域 1.1 首先配置网络,Ubuntu系统能…...
qt实现窗口的动态切换
先说一下整体思路。页面布局两个widget然后再将定时器和按钮关联起来。 定时器发出信号的时候,随着信号,不断地重新设置widget的宽度,实现窗口的动态切换。 具体操作如下: class QtWidgetsApplication4 : public QMainWindow {…...
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题② 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...
【Vulkan入门】09-CreateFrameBuffer
目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…...
FPGA设计-Vivado的Off-Chip Termination设置问题
目录 简介: 设置规则: output strength(输出驱动器的电流驱动能力) slew rate(输出电压压摆率) Pull type(上下拉类型) On-chip termination(输入端/输出端的内置片上端接电阻) 输出端接电阻配置 简介: 经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终…...
GC常见垃圾回收算法,JVM分代模型
如何判断是垃圾?引用计数器和Root可达性算法 如何进行清除?标记清除、复制、标记整理 堆分代模型?Eden,Surevivor,Tenuring 一个对象从创建到消亡的过程? 对象什么时候进入老年代? 一、GC&a…...
面试题整理(三)
芯冰乐知识星球入口:...
可视化建模以及UML期末复习----做题篇
一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...
PostGIS分区表学习相关
在Postgresql中对空间数据进行表分区的实践_postgresql空间数据-CSDN博客文章浏览阅读1.4k次,点赞26次,收藏21次。Postgresql的分区功能允许将一个大表按照特定的规则拆分成多个小的分区表。这样做的好处在于,在查询数据时,可以只…...
JavaEE 【知识改变命运】03 多线程(3)
文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因:1.线程是抢占式的2. 多线程修改同一个变量(程序的要求)3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…...
Flash操作 原子写 非原子写
原子和非原子操作 读、修改、写操作 对一个变量 A 1或上0x01,C语言写法: A 1| 0x01; 通过编译转成汇编后: LOAD R1,[#A 1] ; Read a value from A 1 into R1 MOVE R2,#0x01 ; Move the absolute constant 1 into R2 OR R1,R2 ; Bitwise O…...
厦门凯酷全科技有限公司怎么样?
随着短视频和直播带货的兴起,抖音电商平台迅速崛起,成为众多品牌和商家争夺的新战场。在这个竞争激烈的市场中,如何抓住机遇、实现销售增长,成为了每个企业面临的挑战。厦门凯酷全科技有限公司(以下简称“凯酷全”&…...
ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间
以下相关详细信息请参考ubuntu官网。 在Ubuntu 18.04中,查看特定用户(例如用户broko)的命令行历史记录,并同时显示执行命令的时间,可以通过修改用户的shell配置文件来实现: • 设置HISTTIMEFORMAT环境变量…...
推荐系统里面的多任务学习概述
1. 概述 多任务学习(multi-task learning),本质上是希望使用一个模型完成多个任务的建模,在推荐系统中,多任务学习一般即指多目标学习(multi-label learning),不同目标输入相同的fe…...
解决uview ui赋值后表单无法通过验证
微信小程序中 主要还是文档有这样一段话://如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。 添加即可通过 onReady() {//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过…...
【GL010】C/C++总结(二)
C部分 1. C中类成员的访问权限 无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部 (定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 p…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
