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

这篇具有很好参考价值的文章主要介绍了【Linux】make/Makefile & 进度条小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,认识 make/makefile

二,实例代码

1,依赖关系

2,原理

3,项目清理

4,测试讲解

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

game.h

game.c

test.c

程序详解


【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

 

一,认识 make/makefile

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

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

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

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

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

二,实例代码

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

像这样直接输入指令 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,测试讲解

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

直接一键清理文件;

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

将他们换个顺序;

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

开始整硬活了兄弟们;

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

game.h

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

#include<stdio.h>
#include<time.h>
#include<unistd.h>

void game(double rate);
void download();

game.c

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

#include"game.h"
#define MAX 1024*1024*1024

char* 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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

#include"game.h"

int main()
{
	download();
	return 0;
}

程序详解

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言

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

【Linux】make/Makefile & 进度条小程序,Linux,linux,运维,服务器,开发语言文章来源地址https://www.toymoban.com/news/detail-751402.html

到了这里,关于【Linux】make/Makefile & 进度条小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】实现进度条小程序

    个人主页 : zxctscl 如有转载请先通知 在之前已经了解了 【Linux】vim的使用和 【Linux】编译器-gcc/g++使用还有 【Linux】自动化构建工具-make/Makefile,有了这些工具,这次来实现一个进度条小程序。 换行:是换到新的一行。 回车:是回到最开始。 举个例子:在格子里面写字的时

    2024年03月22日
    浏览(38)
  • 『Linux升级路』进度条小程序

    🔥 博客主页: 小王又困了 📚 系列专栏: Linux 🌟 人之为学,不日近则日退 ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、预备知识 📒1.1缓冲区 📒1.2回车和换行 二、倒计时 📒2.1源代码 📒2.2注意事项 三、进度条 📒3.1源代码 📒3.2实际应用 我们先观察两段代码的现象

    2024年02月05日
    浏览(30)
  • 【Linux旅行记】进度条小程序

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月14日
    浏览(27)
  • 【Linux取经路】进度条小程序

    2024年02月14日
    浏览(30)
  • 【Linux】项目自动化构建工具-make和Makefile 的使用和进度条的实现

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

    2024年02月07日
    浏览(56)
  • 【Linux】进度条小程序——深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月14日
    浏览(27)
  • 【Linux】进度条小程序の深度解剖(7)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月06日
    浏览(35)
  • 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 🎓 🌍博客主页:张小姐的猫~江湖背景🌍 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥集中起来的意志可以击穿顽石🔥 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉欢迎持续关注!🎉🎉

    2024年01月16日
    浏览(37)
  • 【Linux】进度条小程序的深度解剖(细节满满)

    ​​​​​ ​ 前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读: YY 的《Linux》系列 ❀❀❀❀❀ 【Linux】Linux环境搭建(新手指南,购买,登录)(

    2024年02月16日
    浏览(25)
  • 【Linux】从0到1实现一个进度条小程序

    个人主页:🍝在肯德基吃麻辣烫 我的gitee:gitee仓库 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 进度条实现: 本文讲解如何从0到1实现一个进度条小程序。 我们在写作文的时候,写到了一行的结尾,就得另起一行并到开头继续写。 其中,这个另起一行的动作

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包