【Linux】make/Makefile 进度条小程序

目录

一,认识 make/makefile

二,实例代码

1,依赖关系

2,原理

3,项目清理

4,测试讲解

三,Linux第一个小程序-进度条

game.h

game.c

test.c

程序详解


 

一,认识 make/makefile

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

二,实例代码

一般我们形成可执行程序都是这样的:

今天我们用make/makefile 来实施;

创建文件的名称一定要是 makefile 第一个字母大小写都可以;

像这样直接输入指令 make 可执行文件就会自动形成,非常的方便;

1,依赖关系

上面的文件 mybin,它依赖 game.o

game.o , 它依赖 game.s

game.s , 它依赖 game.i

game.i , 它依赖 game.c

2,原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么

1,make 会在当前目录下找名字叫 “Makefile” 或 “makefile” 的文件。

2,如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“mybin”这个文件, 并把这个文件作为最终的目标文件。

3,如果mybin文件不存在,或是mybin所依赖的后面的game.o文件的文件修改时间要比mybin这  个文件新(可以用 touch 测试),那么他就会执行后面所定义的命令来生成mybin这个文件。

4,如果如果hello所依赖的game.o文件不存在,那么make会在当前文件中找目标为game.o文件的依赖性,如果找到则再根据那一个规则生成game.o文件。(这有点像一个堆栈的过程)所依赖的game.o文件不存在,那么make会在当前文件中找目标为game.o文件的依赖性,如果找到则再根据那一个规则生成game.o文件。(这有点像一个堆栈的过程)

5,当然,你的C文件和H文件是存在的啦,于是make会生成game.o 文件,然后再用 game.o 文件声明 make的终极任务,也就是执行文件mybin了。

6,这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

7,在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。

8,make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起, 我就不工作啦。

3,项目清理

工程是需要被清理的

像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行, 不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。

但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

可以将我们的 mybin 目标文件声明成伪目标,测试一下。

4,测试讲解

以上都是面向于基层的原理,字有点多适合深度研究,现在我们通俗一点;

mybin:game.c 是依赖关系,mybin 是game.c 形成的可执行文件,但是具体要怎么实现呢,这就要 依赖方法了,gcc game.c -o mybin ,就是依赖方法;

而且 gcc game.c -o mybin 也可以写成 gcc -o $@  $^ ;

$@ 表示 mybin ,$^ 表示 game.c

也是一样的效果,而且更加方便,建议使用后者;

.PHONY 是讲文件修饰成 伪文件,伪文件的特性是总是被执行;

最好放在下面给 clean ,这样程序就是总是被执行清理了;

当我们总是执行 make ,后面的就失效了,因为 mybin 的修改时间比 game.c 的修改时间慢;

上面红线画的就是 修改时间,mybin 比 game.c 慢所以 make 不会被执行;

我们修改一下 game.c 文件看看;

刚修改完,game.c 的时间比 mybin 慢;

所以可以运行 make ,再次打开的时候 mybin 文件的修改时间就比 game.c 长了,make 也就执行不了了;

我们也可以用 touch 来刷新文件的修改时间;

如果将我们的 mybin 目标文件声明成伪目标,测试一下。

这样make 每次都会被执行了,但是不推荐这样使用,因为这本身就是对的,没有修改就不要执行嘛,没有毛病,现在我们的文件小每次执行都没有关系,如果我们文件非常大的时候,每次都执行的话就非常消耗时间了;

clean 是用来清理文件的,用的话是make clean;

直接一键清理文件;

哦对了,还有一个就是我们使用的 make,他为什么就执行 mybin,而不执行 clean 呢?

指令make 是从上往下执行的;

将他们换个顺序;

那我们执行 make 的时候就是执行 clean 了,执行 make mybin 的时候就是形成可执行文件 mybin 了,这个是从上往下的,顺序不影响;

三,Linux第一个小程序-进度条

开始整硬活了兄弟们;

先把刚开始需要的文件准备好;

game.h

#include<stdio.h>
#include<time.h>
#include<unistd.h>void game(double rate);
void download();

game.c

#include"game.h"
#define MAX 1024*1024*1024char* buff = "|/-\\";
int i = 0;
char arr[102] = { 0 };
void game(double rate)
{if (rate <= 1.0){arr[0] = '=';}printf("[%-100s][%.1lf%%][%c]\r", arr, rate, buff[i % 4]);fflush(stdout);arr[(int)rate] = '=';if (rate< 99.0){arr[(int)rate+1] = '>';}i++;
}void download()
{srand(time(NULL)^1023);int max = MAX;int cnt = 0;double rate = 0;while (rate<100.0){cnt+= rand() % (1024*1024);rate = ((cnt*1.0)/max)* 100;if (rate > 100){rate = 100;}game(rate);usleep(50000);}
}

test.c

#include"game.h"int main()
{download();return 0;
}

程序详解

这个程序是做了一个内存进度条,让 MAX 为需要下载的内存大小,然后 cnt 为已经下载的部分,rate 为已经下载的百分比,然后传给 game 函数进行进度条的运行,game 函数,根据 rete 的大小进行百分比输出,等于号也是,还有翻转的数组来判断程序有没有卡顿,之后再等于号后面加上 > 进行输出点缀,直到 100% ,退出程序;

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

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

相关文章

教你如何将Web项目部署到Linux中

文章目录 前言0. 什么是部署1. 调整代码达成一致2. 数据库建表3. 构建项目并打包4. 拷贝到 Tomcat 中5. 效果总结 前言 在我们完成了一个Web项目后, 我们该怎样将项目部署到 Linux 系统中呢? 本文就来简单讲解一下. 文章已部署本人的博客系统代码展开讲解. 关注收藏, 开始学…

NeurIPS 2023 | RGIB:对抗双边图噪声的鲁棒图学习

▐ 摘要 链接预测[1,2]是图学习的一种基础任务&#xff0c;用于判断图中的两个节点是否可能相连&#xff0c;被广泛应用于药物发现、知识图谱补全和在线问答等实际场景。尽管图神经网络&#xff08;Graph Neural Network&#xff0c;GNN&#xff09;在该问题的性能上取得了显著…

机器学习的概念和类型

1、人工智能、机器学习、深度学习之间的关系 人工智能&#xff08;AI&#xff09;是广泛的概念&#xff0c;指赋予计算机智能特性。机器学习&#xff08;ML&#xff09;是AI的一个分支&#xff0c;是指通过计算机学习和改进性能。深度学习&#xff08;DL&#xff09;是ML的一类…

搭个网页应用,让ChatGPT帮我写SQL

大家好&#xff0c;我是凌览。 开门见山&#xff0c;我搭了一个网页应用名字叫sql-translate。访问链接挂在我的个人博客(https://linglan01.cn/about)导航栏&#xff0c;也可以访问https://www.linglan01.cn/c/sql-translate/直达sql-translate。 它的主要功能有&#xff1a;…

第95步 深度学习图像目标检测:Faster R-CNN建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们学习深度学习图像目标检测系列。 深度学习图像目标检测是计算机视觉领域的一个重要子领域&#xff0c;它的核心目标是利用深度学习模型来识别并定位图像中的特定目标。这些目标可以是物体、人、动物或其他可识…

Docker Swarm总结(1/3)

目录 1、swarm 理论基础 1.1 简介 1.2 节点架构 1.3 服务架构 1.4 服务部署模式 2、swarm 集群搭建 2.1 需求 ​2.2 克隆主机 2.3 启动5个docker宿主机 2.4 查看 swarm 激活状态 2.5 关闭防火墙 2.6 swarm 初始化 2.7 添加 worker 节点 2.8 添加 manager 节点 3、…

Mybatis-Plus3.0默认主键策略导致自动生成19位长度主键id的坑

码字不易&#xff0c;如果对您有用&#xff0c;求各位看官点赞关注~ 原创/朱季谦 目前的Mybatis-Plus版本是3.0&#xff0c;至于最新版本是否已经没有这个问题&#xff0c;后续再考虑研究。 某天检查一位离职同事写的代码&#xff0c;发现其对应表虽然设置了AUTO_INCREMENT自…

7.1 Windows驱动开发:内核监控进程与线程回调

在前面的文章中LyShark一直在重复的实现对系统底层模块的枚举&#xff0c;今天我们将展开一个新的话题&#xff0c;内核监控&#xff0c;我们以监控进程线程创建为例&#xff0c;在Win10系统中监控进程与线程可以使用微软提供给我们的两个新函数来实现&#xff0c;此类函数的原…

office 365企业版安装教程

1.下载所需工具&#xff08;防火墙和防毒软件记得关闭&#xff09; 下载链接&#xff1a;所需文件 2.安装激活office 1.安装 office tool plus 2.已安装过office 先进行office的移除&#xff0c;再进行未安装office的步骤进行 3.未安装过office 1.设置部署 按照以下来进行安…

360:流氓or保家卫国的勇士?

你曾用过360吗&#xff0c;这个在国内名声不好的杀毒软件&#xff0c;却是令国外黑客闻风丧胆的存在。 首先&#xff0c;在电脑病毒刚兴起的年代&#xff0c;杀毒软件是要收费的&#xff0c;当时盛行的瑞星和金山就是采用的付费模式&#xff0c;而就在2006年&#xff0c;奇虎…

C/C++通过位操作实现2个uint32_t合并为uint64_t

#include <iostream> using namespace std;int main() {uint32_t a 10;uint32_t b 600;//先将uint32_t的a转为uint64_t&#xff0c;此时a前面32位都是0&#xff0c;然后左移32位&#xff0c;此时右32位为0&#xff0c;最后加上uint32_t类型的b&#xff0c;填充右32位的…

解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题

总结/朱季谦 楼主最近在做公司的工作流平台&#xff0c;发现一个很无语的事情&#xff0c;Activiti5.22的流程图在Windows环境上部署&#xff0c;是可以正常查看的&#xff0c;但发布到公司的Linux服务器上后&#xff0c;在上面进行流程图在线部署时&#xff0c;发现中文都变成…

2023亚太杯数学建模C题思路代码 - 我国新能源电动汽车的发展趋势

1 赛题 问题C 我国新能源电动汽车的发展趋势 新能源汽车是指以先进技术原理、新技术、新结构的非常规汽车燃料为动力来源( 非常规汽车燃料指汽油、柴油以外的燃料&#xff09;&#xff0c;将先进技术进行汽车动力控制和驱动相结 合的汽车。新能源汽车主要包括四种类型&#x…

一套开源、强大且美观的WPF UI控件库 - HandyControl

前言 今天给大家推荐一套开源、强大且美观的WPF UI控件库&#xff1a;HandyControl。 WPF介绍 WPF 是一个强大的桌面应用程序框架&#xff0c;用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能&#xff0c;让开发者可以创…

MySQL用户与权限管理

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解&#xff08;如有不正确的地方欢迎各位小伙伴在评论区提意见&#xff0c;博主会及时修改&#xff09; MySQL用户与权限管理 登录 #本地登录 mysql -uroot -p123456#远程登录 #客户端语法&#xff1a;mysql -…

聚观早报 |快手Q3营收;拼多多杀入大模型;Redmi K70E开启预约

【聚观365】11月23日消息 快手Q3营收 拼多多杀入大模型 Redmi K70E开启预约 华为nova 12系列或下周发布 亚马逊启动“AI就绪”新计划 快手Q3营收 财报显示&#xff0c;快手第三季度营收279亿元&#xff0c;同比增长20.8%&#xff1b;期内盈利21.8亿元&#xff0c;去年同期…

猫罐头多久喂一次?好用的猫罐头牌子推荐

猫爱吃猫罐头&#xff0c;包含各种美味&#xff0c;提供营养和口感。但喂猫吃罐头需技巧和耐心&#xff0c;以确保猫健康快乐成长。 作为一个从业宠物营养师7年的人&#xff0c;可以说对于猫咪的食物很有研究和猫罐头品牌选购上&#xff0c;我有自己的见解。 一、猫罐头多久喂…

40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

循环神经网络(RNN)实现股票预测

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据 四、数据预处理1.归一化2.设置测试集训练集 五、构建模型六、激活模型七、训练模型八、结果可视化1.绘制loss图2.预测3.评估 一、前言 我的环境&#xff1a; 语言环…

【Rust】快速教程——一直在单行显示打印、输入、文件读写

前言 恨不过是七情六欲的一种&#xff0c;再强大的恨也没法独占整颗心&#xff0c;总有其它情感隐藏在心底深处&#xff0c;说不定在什么时候就会掀起滔天巨浪。——《死人经》 图中是Starship扔掉下面的燃料罐&#xff0c;再扔掉头顶的翅膀后&#xff0c;再翻转过来着陆火星的…