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

news2025/2/6 19:47:09

目录

一:自动化构建工具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.coloradmin.cn/o/1703287.html

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

相关文章

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点:模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

调用萨姆索诺夫函数:深入探索函数的参数与返回值

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、萨姆索诺夫函数的引入与调用 二、如何获取函数的返回值 三、无参数与无返回值的函数调…

06_Tomcat

文章目录 Tomcat1.概念2.Tomcat安装3.Tomcat项目结构4.标准web项目结构5.Tomcat部署项目方式6.IDEA关联Tomcat6.1 构建tomcat和idea关联6.2 使用idea创建一个Javaweb工程6.3 使用idea将工程**构建**成一个app6.4 使用idea将构建好的app**部署**到tomcat中 Tomcat 1.概念 Tomc…

《浪姐》也搞live直播,真成综艺流量密码了?

继《歌手》之后,芒果的另一档综艺《浪姐》也将开启直播。 《乘风2024》官博宣布进行突击加场直播赛,姐姐们将面临全开麦live直播,摇人投票排在前十的姐姐获得live直播抢先权。 这是看《歌手2024》直播赛制火了,也想蹭个热度搞直…

拓展海外市场,助力中国海外运营企业实现全球化发展——工博科技SAP出海数字化解决方案

近年来,在全球化浪潮下,中国出海企业正从简单的产品扩张向更加成熟的跨国经营及全球化发展转变。中资企业要积极拓展国际市场、加大步伐融入全球的生态,打造韧性供应链,但面对风云变幻的国际形势,需要提高自身的风险管…

Java绩效考核系统源码 springboot员工绩效考核系统源码

Java绩效考核系统源码 springboot员工绩效考核系统源码-009 源码下载地址:https://download.csdn.net/download/xiaohua1992/89352195 项目介绍 本系统的功能分为管理员和员工两个角色 管理员的功能有: (1)个人中心管理功能&a…

基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码

第一步:准备数据 17种猴子动物数据: self.class_indict ["白头卷尾猴", "弥猴", "山魈", "松鼠猴", "叶猴", "银色绒猴", "印度乌叶猴", "疣猴", "侏绒"…

DDR、LPDDR和GDDR的区别

1、概况 以DDR开头的内存适用于服务器、云计算、网络、笔记本电脑、台式机和消费类应用,支持更宽的通道宽度、更高的密度和不同的形状尺寸。 以LPDDR开头的内存适合面向移动和汽车这些对规格和功耗非常敏感的领域,提供更窄的通道宽度和多种低功耗运行状态…

node.js学习P3-P10

P3 npm package.json(package解读npm工具换镜像源) 一个package.json文件可以的作用 作为一个描述文件,描述了你的项目依赖哪些包 ,用来干什么的允许我们使用“语义版本规则”,指明你项目依赖的版本让你的构建更好的…

cin-getline缓存区

更多资源请关注纽扣编程微信公众号 cin.sync()清除缓存区 如果需要输入如下内容 3 This is C language. This is JAVA language. This is Python language. 写如下程序 #include<bits/stdc.h> using namespace std; string str[100]; int main(){int n;cin>&…

【Pandas】配合Numpy做数据异常值处理

1.四分卫间距确定数据范围 numpy.quantile(a, q, axisNone, outNone, overwrite_inputFalse, methodlinear, keepdimsFalse, *, interpolationNone)[source]计算指定轴的n分位数 参数q给定指定的几分位数&#xff0c;范围[0,1] import numpy as np import pandas as pd def …

每日一题——Python实现PAT甲级1029 Median(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的方法 代码功能和结构点评 时间复杂度分析 空间复杂度分析 优化建议 我要更强…

【Text2SQL 论文】IncSQL:通过增量式生成 action 序列来得到 SQL

论文&#xff1a;IncSQL: Training Incremental Text-to-SQL Parsers with Non-Deterministic Oracles ⭐⭐⭐ ICLR 2019&#xff0c;arXiv:1809.05054, Microsoft Research 一、论文速读 本文提出了 IncSQL&#xff0c;一个使用 Non-Deterministic Oracles 思路的增量式 Text…

从零开始打造教育APP:在线教育系统源码与开发流程

很多人疑问&#xff0c;应该如何从零开始打造一个在线教育APP&#xff1f;今天&#xff0c;小编将详细为大家讲解在线教育系统的源码与开发流程。 一、需求分析 对于在线教育APP&#xff0c;需要要明确以下几点&#xff1a; 1.目标用户&#xff1a;明确APP的用户群体&#xf…

字符串和字符串函数(1)

前言&#xff1a; 字符串在C语言中比较特别&#xff0c;没有单另的字符串类型&#xff0c;想要初始化字符串必须用字符变量的数组初始化&#xff0c;但是在C语言标准库函数中提供了大量能对字符串进行修改的函数&#xff0c;比如说可以实现字符串的的拷贝&#xff0c;字符串的追…

判断dom元素是否滚动到底、是否在可视区域

概览 我们日常开发中&#xff0c;在面对懒加载、虚拟列表需求时&#xff0c;经常需要判断dom元素是否滚动到底、是否在可视区域。但是由于涉及的属性太多了&#xff0c;比如scrollTop、clientHeight、scrollHeight、getBoundingClientRect()等属性&#xff0c;现根据这两个场景…

Docker环境安装并使用Elasticsearch

1、拉取es docker pull elasticsearch:7.10.12、查看镜像 docker images3、启动es docker run -d --name esearch -p 9200:9200 -p 9300:9300 elasticsearch:7.10.14、如果启动ES时出现一下问题 Unable to find image docker.elastic.co/elasticsearch/elasticsearch:7.10.…

基于springboot+vue的班级综合测评管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

台灯的功能作用有哪些?看完就知道台灯怎么选!

作为一位家长&#xff0c;我深刻意识到保护孩子眼部健康的重要性。随着科技的飞速发展&#xff0c;孩子们越来越多地使用电子设备&#xff0c;如平板电脑、手机和电视&#xff0c;长时间盯着屏幕成为了他们日常生活的一部分。然而&#xff0c;这些屏幕发出的蓝光和闪烁的光线&a…

C++的第一道门坎:类与对象(一)

1.面向过程与面向对象 1.1面向过程 我们之前学习的C语言就是一种面向过程的语言&#xff0c;面向过程的语言强调的是具体实现的过程&#xff0c;一般用函数来具体实现。我们用面向过程的思想&#xff0c;就可以把炒菜分为以下几个步骤: 1.2面向对象 而对于面向对象的语言而言…