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   查看当前函数中的定义的局部变量

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Centos7静态路由和动态路由

路由,即路由选择(Routing),是指在计算机网络中选择数据传输路径的过程。路由器(Router)是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中,选择最佳路径将数据包从源节点传递到…

kubectl

陈述式资源管理方法 kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口 kubectl 是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织转换成apiserver能识别的信息,进而实现…

在某云服务器上搭建公网kali linux2.0

前提: 可用的 CVM 实例 挂载一个系统盘之外的盘,安装完成后可卸载! 创建实例,安装centos7系统! 然后执行fdisk -l看磁盘的情况 在这里我将把镜像写入vdb这块数据盘 非 root 的情况下记得sudo执行以下命令 注意&…

【综合类型第 39 篇】《我的创作纪念日》成为创作者的第2048天

这是【综合类型第 39 篇】,如果觉得有用的话,欢迎关注专栏。 前言 无意间看了一眼CSDN的私信,提示我 Allen Su ,不知不觉今天已经是你成为创作者的 第2048天 啦,为了纪念这一天,我们为您准备了一份专属小…

51-53 DriveWorld:通过自动驾驶世界模型进行 4D 预训练场景理解 (含模型数据流梳理)

24年5月,北京大学、国防创新研究院无人系统技术研究中心、中国电信人工智能研究院联合发布了DriveWorld: 4D Pre-trained Scene Understanding via World Models for Autonomous Driving。 DriveWorld在UniAD的基础上又有所成长,提升了自动驾驶目标检测…

Java方法的基本用法

Java方法的基本用法 前言一、什么是方法方法存在的意义示例 二、方法定义语法基本语法代码示例注意事项 三、方法调用的执行过程基本规则代码示例计算两个整数相加计算 1! 2! 3! 4! 5! 四、实参和形参的关系代码示例交换两个整型变量原因分析解决办法 五、没有返回值的方法…

如果有多个文件夹,怎么快速获得文件夹的名字呢

上一篇写到怎么批量建立文件夹,那么怎么获取批量文件夹的名字呢? 一、啊这,这真是一个好问题二、这个得用Python(文本末尾有打包程序,点击链接运行就可以了)(1)首先建立一个py文件&a…

类的组合、作用域与可见性、类的静态成员、单例模式、

类的组合 一个类内嵌其他类的对象作为成员的情况 has - a组合 初始化列表的另一用途:为了调用数据成员的带参构造函数 能够层层递进 class Line { public:Line(int x1 0, int y1 0, int x2 0, int y2 0);Line(const Line &other);~Line();Line(const Po…

linux mail命令及其历史

一、【问题描述】 最近隔壁组有人把crontab删了,crontab这个命令有点反人类,它的参数特别容易误操作: crontab - 是删除计划表 crontab -e 是编辑,总之就是特别容易输入错误。 好在可以通过mail命令找回,但是mai…

恭喜!国内医生喜提哈佛大学布莱根妇女医院访问学者邀请函

【校园简介】 布莱根妇女医院(Brigham and Women’s Hospital,BWH)位于马萨诸塞州波士顿的哈佛医学区,毗邻于哈佛医学院校园,是哈佛大学医学院的主要附属医院之一。位于马萨诸塞州波士顿的布莱根妇女医院有12项成人学科位居全国权威,并在耳鼻…

【Linux】详解线程控制之线程创建线程终止线程等待线程分离

一、线程创建 thread:这是一个指向pthread_t类型的指针,用于获取新创建线程的线程ID。在调用pthread_create后,这个指针会被设置为新线程的ID。 attr:这是一个指向pthread_attr_t类型的指针,用于设置线程的属性&#x…

网络工程师备考1——基础学习

认识设备 1 交换机 一、什么是交换机? 实现不同电脑之间数据的转发 换机是一种用于电(光)信号转发的网络设备。 它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层,即数据…

SpringBoot3整合阿里云短信服务-1(配置阿里云短信服务)

SpringBoot3整合阿里云短信服务-1(配置阿里云短信服务) 一、开通阿里云短信服务 阿里云官网:阿里云官网 选择产品中企业服务与云通信中的短信服务 选择免费开通 选择快速学习和测试 根据这几个全部配置一下我这里是配置好了所以学习进度是100% 1.1 添加资质 首先选择新增资质 …

SpringBoot发送邮箱

一、导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId> </dependency> 二、添加配置 application.yml文件 将username修改为自己的邮箱&#xff0c;password修改为…

【Vue】Vue2使用ElementUI

目录 Element UI介绍特点Vue2使用Element安装引入ElementUI组件库 使用ElementUI用户注册列表展示其他 mint-ui介绍特点安装组件引入组件Mint-ui相关组件 Element UI 介绍 官网(基于 Vue 2.x ):https://element.eleme.cn/#/zh-CN ElementUI 是一个基于 Vue.js 的桌面端组件库…

基于Arduino的电梯超载报警系统

企鹅&#xff1a;2583550535 项目和论文都有 第1章 绪论.............................................................................................................................. 1 1.1 项目背景及意义........................................................…

ABP.VNET 项目结构

想要了解ABP分层架构&#xff1a;ABP分层架构-CSDN博客 可以看此篇文章 apb.vnet 生成的项目的目录结构 .Application 项目 应用服务用于将领域(业务)逻辑暴露给展现层。 展现层通过传入DTO(数据传输对象)参数来调用应用服务&#xff0c;而应用服务通过领域对象来执行相应的…

【网络安全】2030年十大新兴网络安全威胁

欧盟网络安全局&#xff08;ENISA&#xff09;已发布了一份全面的清单&#xff0c;列出了预计到2030年将影响数字领域的十大新兴网络安全威胁。 该预测是为期八个月的广泛研究的成果&#xff0c;融合了ENISA前瞻专家小组、CSIRTs网络以及欧盟CyCLONe专家的见解。 这项研究突显…

抖音小店无货源怎么做?从开店到发货,最全教程来了!

哈喽~我是电商月月 近几年&#xff0c;抖音的发展如火如荼&#xff0c;抖音小店也吸引了大批新手商家入驻 那抖音小店具体流程到底怎么做&#xff1f;无货源的商家去哪找货&#xff1f;怎么上架&#xff0c;如何推流? 不知道&#xff1f; 今天我就给大家讲一下抖音小店从开…

[集群聊天服务器]----(五)User类、UserModel类

接着上文[集群聊天服务器]----(四)MySQL数据库模块&#xff0c;接下来我们对User类、UserModel类进行剖析&#xff0c;User表和UserModel类是项目最基本也是最重要的部分&#xff0c;通过它我们对用户的id&#xff0c;用户名&#xff0c;密码&#xff0c;状态相关信息进行存储&…