Linux修炼之路之自动化构建工具,进度条,gdb调试器

目录

一:自动化构建工具make/makefile 

     生成内容:

     清理内容:

     对于多过程的:

  对于多次make:

特殊符号: 

二:小程序之进度条 

三:git的简单介绍 

四:Linux调试器gdb

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

一:自动化构建工具make/makefile 

1.make是一个指令,makefile是当前目录下的文件,两个搭配使用完成项目的自动化构建

2.makefile的工作原理

     生成内容:

对于make在编译的时候,会首先在当前目录下查找对应的makefile文件,再在makefile文件当中根据依赖关系和依赖方法,执行依赖方法中的内容,编译形成对应的目标文件(上面的例子中为test可执行文件) 

     清理内容:

这里就会发现,在清理时的指令为make clean,但在创建时只需要make就行,这是因为

make会自顶向下扫描makefile,把要形成的第一个目标文件充当make的默认动作,形成的第一个目标文件,所以谁在前,make就会先直接生成谁

所以对于其他的操作,make必须指定的去操作 

形式如: make 对应的目标文件     指定名称地执行该依赖关系与匹配的依赖方法 

     对于多过程的:

会发现在执行时的和在makefile中的顺序是不同的,这是因为

make在扫描makefile文件时,会优先根据依赖关系,查找依赖关系中所依赖的文件列表是否在当前目录已经存在 ,如不存在,makefile会类似于递归式的去形成依赖文件,在依赖文件当中根据依赖关系和依赖方法形成对应的依赖文件,然后统一根据依赖文件形成目标文件,所以简单地说就是make会自动推导makefile中的依赖关系,这是一种栈式的结构

  对于多次make:

1.可以看出对于多次执行的操作是不允许的,这是因为这样做的好处的是可以提高编译效率,避免     重复的操作

2.但这是如何做到的 ,这就得引出下面的内容了

首先一定是源文件形成可执行文件,所以一般而言源文件的最近修改时间是老于可执行文件的最近修改时间;但如果我们修改了源文件,历史上还有可执行文件的话,那么源文件的最近修改时间是一定要新于可执行文件的最近修改时间的

这样的话,就只需要比较可执行文件的最近修改时间和源文件的最近修改时间,便能做到是否允许重新编译

      如果源文件的最近修改时间老于可执行文件的,不需要重新编译

      如果源文件的最近修改时间新于可执行文件的,需要重新编译

一般而言这两个文件的最近修改时间是不会相同的

3.stat指令 查看源文件/可执行文件的时间

使用: stat 文件名

Access是最近访问时间     

Modify是最近修改文件内容的时间(关键时间)     

Change是最近修改文件属性的时间

修改三个时间

touch -a 已经存在的文件  修改文件的Access时间

touch -m 已经存在的文件  修改文件的Modify时间(修改的同时Change时间也会改变) 

chmod  修改文件的Change时间(Modify时间不一定改变)

touch 文件名  修改三个时间(如果文件已经存在,则修改时间,反之是创建文件的操作)

但特殊的对于Access时间不使用touch -a 的话,他的更新策略则是根据Modify和Change的更新次数,还有最近更新的文件被访问的计数器统计的次数来决定是否更新

所以对于make是会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译,因此依赖关系是不一定总被执行的,但如果想要依赖关系总是被执行,就需要添加.PHONY来修饰

特殊符号: 

二:小程序之进度条 

1.回车与换行

回车是\r,换行是\n两者是不相同的,回车是回到行的开始处,换行则是到下一行

2.缓冲区

对于这段代码在执行时,总是休眠两秒后再打印出结果,那么在sleep的期间,"hello Linux"这段代码是存放在哪的?但肯定的是一定是被保存起来了,这就存放在由c语言维护的一段内存空间,即缓冲区

如果代码中有\n的话,就会立即刷新出来,没有的话就只能等缓冲区满或者代码执行完结束,因为显示器模式是行刷新

那么如果要在执行完printf后立即将结果刷新出来,可以使用fflush(stdout) 将结果强制刷新出来

这里可以实现一个倒计时

3.进度条的实现

 processbar.c

processbar.h

 

main.c

 

三:git的简单介绍 

git是一个具有网络功能的开源的版本控制器,集客户端与服务端于一体

安装git yum install git

将远程仓库克隆到本地  git clone 远程仓库的网址

git三板斧:(进入仓库文件中进行操作)

 git add .   (将仓库下没有上传的文件进行上传)

git commit -m "日志"

git push +建立仓库时的密码

其他的注意:

.git 为本地仓库(ls -al 查看)

git --version 查看版本

git log 查看日志

git status 查看提交状态

四:Linux调试器gdb

1.在Linux默认编译生成的可执行程序时release版本的,无调试信息,要想生成debug版本的话,在gcc编译时加   -g选项  生成debug 版本

可以用gdb 可执行程序           验证默认生成的为debug/release 版本,也可以进入gdb开始调试

常用操作:

q   退出

r  执行代码

b 行号/文件名:行号/函数名/文件名:函数名    对应位置设置断点信息

info b   查看断点信息

d 断点的编号(NUM)    删除断点

n   逐过程执行

s    逐语句执行

l 数字/函数名     查看gdb代码,默认显示十行,可多次回车即可显示全部(gdb会默认记录上一条命令)

p 变量名   查看变量的值(相当于监视窗口)

display 变量   每次执行都打印变量的值(常显示)

undisplay  变量最左边的编号     取消常显示

until 指定行号    程序跳转执行到指定行

先s进入调用函数内部,再finish         执行完整个调用函数就停下来

c    从断点1执行到断点2

disable 断点编号       停用断点

enable 断点编号          启用断点

set var 变量名=值    修改变量的值

bt 查看调用堆栈

info locals   查看当前函数中的定义的局部变量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fpga 提高有什么进阶书推荐?

到FPGA中后期的时候就要开始接触,如:高速接口、光纤数字信号处理等项目实践了,那么我们可以读一些书进行提升,大家可以收藏下。 高速接口项目《嵌入式高速串行总线技术:基于FPGA实现与应用》作者:张锋 FPGA提升书籍推…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心:Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2],然后面对OpenAI GPT-4o的挑衅,谷歌在大会上直接甩出大杀器Project Astra[3]…

第七节 ConfigurationClassParser 源码分析

tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…

[LLM-Agents]浅析Agent工具使用框架:MM-ReAct

上文LLM-Agents]详解Agent中工具使用Workflow提到MM-ReAct框架,通过结合ChatGPT 与视觉专家模型来解决复杂的视觉理解任务的框架。通过设计文本提示(prompt design),使得语言模型能够接受、关联和处理多模态信息,如图像…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题:用于自然驾驶行为识别的多注意力Transformer 源文链接:https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

java读取shp文件,获取点位

Testvoid contextLoads() {System.out.println(System.currentTimeMillis());//1716516228057 1716516228798String zipFilePath "C:\\code\\risk\\risk_management_backend\\edatope-app\\src\\main\\resources\\新中心范围SHP导入模板.zip";String destDir &quo…

思科模拟器--06.单臂路由升级版--多端路由互连实验--24.5.20

实验图纸如下: 第0步: 先放置六台个人电脑,一台交换机和一台2911路由器(千兆路由器(G0开头的)) 接着,用直通线将 PC0的F0,PC1的F0分别和交换机的F0/0, F0/1连接 交换机的F0/3和路由器的G0/0连接 PC2的F0,PC3的F0分别和交换机的F0/4, F0/5连接 交换机的F0/6和路由器的G0/1…

电脑连接爱快iKuai软路由之后,网卡没有正常获取到IP,无法访问爱快路由管理页?

前言 上一次咱们说到在爱快控制台上设置/辨认lan口,设置完成之后,其他的一些设置就需要在爱快iKuai软路由的管理页面上设置。 有些小伙伴会发现,当电脑连接上爱快软路由的lan口之后,电脑并没有正常获取到ip,导致无法访…

JavaScript表达式和运算符

表达式 表达式一般由常量、变量、运算符、子表达式构成。最简单的表达式可以是一个简单的值。常量或变量。例:var a10 运算符 运算符一般用符号来表示,也有些使用关键字表示。运算符由3中类型 1.一元运算符:一个运算符能够结合一个操作数&…

【Arthas】阿里的线上jvm监控诊断工具的基本使用

关于对运行中的项目做java监测的需求下,Arthas则是一个很好的解决方案。 我们可以用来 1.监控cpu 现成、内存、堆栈 2.排查cpu飚高 造成原因 3.接口没反应 是否死锁 4.接口慢优化 5.代码未按预期执行 是分支不对 还是没提交? 6.线上低级错误 能不能不重启…

STL--set和multiset集合

set和multiset会根据特定的排序准则&#xff0c;自动将元素排序。两者不同之处在于multiset 允许元素重复而 set 不允许。如下图: 使用set或multiset&#xff0c;必须先包含头文件: #include <set>上述两个类型都被定义为命名空间std内的class template: namespace std…

亚马逊自养号测评:深入解析与搭建要求

在亚马逊这电商平台上&#xff0c;商品的评价对于卖家来说至关重要。为了提升商品的曝光率、排名、权重和销量&#xff0c;卖家们纷纷采用各种推广方式&#xff0c;其中&#xff0c;亚马逊自养号测评成为了越来越多卖家选择的一种有效方式。 亚马逊自养号测评&#xff0c;顾名…

分布式事务——9种解决方案的原理与分类

目录 一、概要1. 分布式事务的概念2. 分布式事务解决方案分类 二、常见的分布式事务解决方案1. 基础的 2PC&#xff08;二阶段提交&#xff09;1.1 核心思想1.2 简介1.3 主要特点1.3.1 优点1.3.2 缺点 2. 基础的 3PC&#xff08;三阶段提交&#xff09;2.1 核心思想2.2 简介2.3…

C语言/数据结构——每日一题(有效的括号)

一.前言 如果想要使用C语言来解决这道题——有效的括号&#xff1a;https://leetcode.cn/problems/valid-parentheses/description/我们必须要借用上一篇我们所讲的内容——栈的实现&#xff1a;https://blog.csdn.net/yiqingaa/article/details/138923750?spm1001.2014.3001.…

go routing 之 gorilla/mux

1. 背景 继续学习 go 2. 关于 routing 的学习 上一篇 go 用的库是&#xff1a;net/http &#xff0c;这次我们使用官方的库 github.com/gorilla/mux 来实现 routing。 3. demo示例 package mainimport ("fmt""net/http""github.com/gorilla/mux&…

react实现把pc网站快捷添加到桌面快捷方式

文章目录 1. 需求2. 实现效果3. 核心逻辑4. 完整react代码 1. 需求 这种需求其实在国外一些游戏网站和推广网站中经常会用到&#xff0c;目的是为了让客户 快捷方便的保存网站到桌面 &#xff0c;网站主动尽量避免下次找不到网站地址了&#xff0c;当然精确的客户自己也可以使…

Oracle递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…

GPT提示词技巧,使用教程,国内版官网直达,非套壳

GPT提示词技巧&#xff0c;使用教程&#xff0c;国内版官网直达&#xff0c;非套壳 主站点&#xff1a;https://chatgpt-plus.top&#xff08;江苏福建地区打不开&#xff0c;需要魔法&#xff09; 店铺地址&#xff1a;https://buy.chatgpt-plus.top/ 选择plus账号进入&…

鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

代码工程及构建介绍 背景 ArkUI作为OpenHarmony的默认开发框架&#xff0c;在本项目&#xff08;ArkUI-X&#xff09;中需要做到一套代码同时支持多平台构建&#xff0c;所以会采取共仓开发的方式&#xff0c;部分仓直接指向OpenHarmony相关开源仓。 代码结构及仓库结构 代…

【机器学习300问】94、什么是多任务学习?

一、多任务学习的定义 多任务学习&#xff08;Multi-Task Learning, MTL&#xff09;是一种机器学习范式&#xff0c;它允许一个模型同时学习执行多个相关但不完全相同的任务。这种方法的核心是&#xff1a;通过共享表示或权重&#xff0c;不同的任务可以在学习过程中相互促进&…