当前位置: 首页 > news >正文

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&#xff…...

禁用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…...

【合作原创】使用Termux搭建可以使用的生产力环境(五)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(四)-CSDN博客我们讲到了如何让proot-distro中的Debian声音驱动正常,将我们的系统备份后,通过VNC客户端连接到VNC服务器,这一篇我们来讲一下xfce桌面的美…...

初始数据结构

程序数据结构算法 数据结构研究计算机数据(元素)间关系 包括数据的逻辑结构和存储结构及其(数据间)操作 一、基本概念 1.1数据 数据即信息的载体,能被输入到计算机中并且能被它识别、存储和处理的符号总称 1.2数据…...

给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题

前言 最近在用自己的卡盒小程序的时候,发现卡片越来越多,有时候要找到某一张来看看笔记要找半天,于是自己做了一个搜索功能,先看效果: 怎么样,是不是还挺不错的,那么这篇文章就讲讲这样一个搜索…...

MATLAB中的合并分类数组

目录 创建分类数组 串联分类数组 创建具有不同类别的分类数组 串联具有不同类别的数组 分类数组的并集 此示例演示了如何合并两个分类数组。 创建分类数组 创建分类数组 A,其中包含教室 A 中的 25 个学生的首选午餐饮料。 rng(default) A randi(3,[25,1]); …...

ShardingSphere-JDBC

1. 什么是分库分表? 分库分表是一种数据库扩展技术,通过将数据拆分到多个数据库(分库)或多个表(分表)中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力&…...

企业如何选择远程控制软件来远程IT运维?

在当今企业的日常运作中,IT运维无疑是核心环节之一,它对于保持企业信息系统的稳定运行和数据安全至关重要。随着科技的快速进步,远程控制软件在IT运维中的应用变得越来越重要。今天,我们就来探讨一下远程控制软件如何助力企业IT运…...

Meta Llama 3.3 70B:性能卓越且成本效益的新选择

Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…...

go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用

在 Go 语言中对接阿里云消息队列(MQ)的 RabbitMQ 配置与调用,首先需要安装和配置相关的 Go 库,并了解如何通过 RabbitMQ 与阿里云消息队列进行交互。 ### 步骤一:安装 RabbitMQ Go 客户端库 阿里云的消息队列&#x…...

《Vue进阶教程》第四课:reactive()函数详解

往期内容: 《Vue零基础入门教程》合集(完结) 《Vue进阶教程》第一课:什么是组合式API 《Vue进阶教程》第二课:为什么提出组合式API 《Vue进阶教程》第三课:Vue响应式原理 通过前面的学习, 我们了解到r…...

网站建设成本/广东seo网站设计

兴华综合养鸡场管理系统是一款功能强大的养鸡场管理软件,这款软件功能涵盖从鸡的购进、存栏、饲养再到产蛋、销售的全部环节,可以帮助用户管理养鸡场的方方面面,让您实时掌握养鸡场的全部信息。兴华综合养鸡场管理系统提供了供应商信息、客户…...

什么网站做美式软装设计方案/免费行情软件网站大全

8月10日,阿里云发布企业级ECS产品线,在发布会上全新一代基于Skylake25G网络的实例,得到了极大的关注,同时全新一代G5/C5/R5实例已经在青岛地域率先上线,成为中国第一家上线Skylake25G网络的云服务商。 在企业最关注的领…...

一般用什么做网站首页/中小型企业网站设计与开发

迁移表空间databump使用databump导入导出,两个库用户必须一致,否则另一个库导入的时候会报错。所以两个库都是用helei用户。给两个数据库的用户分别授予dba权限,这里只是实验更清晰而已。SQL> create user helei identified by MANAGER;Us…...

大淘客平台怎么做分销网站/电子商务seo名词解释

作者:胡存存爱可生 DBA 团队成员,主要负责 MySQL 故障处理和 SQL 审核优化。对技术执着,为客户负责。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。MySQ…...

长春可做微网站的公司/产品市场营销策划书

ipv6 被拒绝,后台定位被拒绝……让很多国内 iOS 开发者心力交瘁。这是一份关于 iOS 审核的终极免费方案,作者iOSWang对最近iOS 审核被拒问题给出了比较全面的方案:Solve-App-Store-Review-Problem. 除此之外本周 fir.im Weekly 收集了微博热转…...

政府网站建设赏析/百度竞价广告投放

RSA因子->der格式(按照一定格式组合)->ASN.1格式(base64)->pem或crt格式(添加头尾信息)...