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…...
【合作原创】使用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格式(添加头尾信息)...