Linux篇第四篇——Linux环境下的工具(make/Makefile+进度条小程序)

Posted 呆呆兽学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux篇第四篇——Linux环境下的工具(make/Makefile+进度条小程序)相关的知识,希望对你有一定的参考价值。

⭐️上一篇博客介绍了Linux环境下的文本编辑工具,软件包管理工具,编译代码和调试代码的工具,这篇博客我还要介绍有关项目自动化构建工具——make/Makefile。

目录


🌏项目自动化构建工具make/Makefile

🍯介绍

用简短的语言描述make和Makefile两个工具就是:make是一条指令,Makefile是一个文件
几点介绍:

  1. 在一个项目中,Makefile定义了一系列的规则来指定文件编译的先后顺序,还有文件是否需要重新编译,甚至还会进行更复杂的功能操作
  2. make是一个命令工具,是一个解释makefile中指令的命令工具
  3. makefile最大的好处就是自动化编译。写好后只需要一条make指令就可以对整个功率进行完全自动编译,极大地提高了开发效率。

🍯依赖关系和依赖方法

依赖关系: 依赖关系指明了两个文件之间的依赖性。例如test.o文件的生成要依赖test.s。
依赖方法: 依赖方法就是怎么做。test.o形成需要多test.s进行汇编,即gcc -c test.s -o test.o。

🍯make/Makefile的使用

先看下面一串代码:

 #include <stdio.h>
 
 int main()
 
	printf("hello makefile\\n");                                                                                                           
	return 0;

在该文件的同目录下创建一个makefile或Makefile的文件。

打开Makefile文件,进行规则的编辑:

第一行中冒号左边的mytest是目标文件,该目标文件依赖于冒号右边的test.c而产生,所以第一行写的是依赖关系,第二行一个tab键之后写上两个文件的依赖方法。第四行**.PHONY** 后面跟着clean,旨在说明clean是一个伪目标,伪目标后面是没有依赖的文件的,且它的特性是:总是可被指向的。想前面的make使用一次后,第二次使用是不被执行的,要使用make clean做一个工程清理的工作。

实例演示:
编译项目 make

清理项目 make clean

make的原理:

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件
  2. make会一层一层地去找文件的依赖关系,知道最左编译出第一个目标文件
  3. make只关心文件的依赖性,如果找到了依赖关系,但是依赖文件不存在,那么make将不被执行

🌏进度条小程序

🌲\\r和\\n

回车与换行

  • 回车: 回到行首
  • 换行: 列不变,进行下一行
    \\r与\\n
  • \\r: 这是一个回车的转义符号,回到行首
  • \\n: 回车+换行,回到行首,然后列不变进行下一行的行首

🌲行缓冲区

先看下面两传代码:
代码1:

代码2:

认真观察上面两段代码,代码1有\\n,代码2没有\\n。
代码1现象:

代码2现象:


仔细观察,可以发现第二段代码是先睡眠5s才进行打印的,但事实上,睡眠5s这行代码是在打印后面的,为什么会有限睡眠5s这种现象呢?难道是这里先执行sleep函数再执行打印语句吗?

答案显然不是这样的,这里就有一个行缓冲区的概念在这里。对于C语言级别的缓冲区而言,任何字符串都会先保存在这个缓冲区里面,等待刷新在显示屏上。但是显示器刷新是属于行刷新,就是遇到‘\\n’就进行刷新。所以现在我们就理解了,代码2中没有’\\n’,要打印的字符串一直保存在了C语言级别的缓冲区,只有程序运行快结束是才会把这些字符串刷新在屏幕上。

那我们应该怎样对代码2进行理解刷新呢?我们可以在打印一起后面加上:

fflush(stdout);

这里的意思是刷新标准输出流,这里指的是显示器。
所以修改后代码如下:

代码运行结果如下:

🌲进度条

代码如下:

 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
  
 int main()
 
	char bar[101];
	memset(bar,'\\0', sizeof(bar));
	char* lable = "|/-\\\\";
	int i = 0;
	while (i <= 100)                                                                                                                    
	
		printf("[%-100s][%2d%][%c]\\r", bar, i, lable[i%4]);
		fflush(stdout);
		usleep(50000);
		bar[i] = '#';
		++i;
	
	printf("\\n");
	return  0;
 

代码运行效果如下:

🌐总结

Linux环境下的工具介绍就到这里了。欢迎大家点赞支持~

以上是关于Linux篇第四篇——Linux环境下的工具(make/Makefile+进度条小程序)的主要内容,如果未能解决你的问题,请参考以下文章

python基础篇第四篇内置函数装饰器:

Linux篇第十四篇——多线程(线程同步和互斥+线程安全+条件变量)

Linux篇第十四篇——多线程(线程同步和互斥+线程安全+条件变量)

[第四篇]——Windows Docker 安装之Spring Cloud直播商城 b2b2c电子商务技术总结

Linux提权第四篇-Linux Cron Jobs(任务计划)提权(crontab文件覆盖提权Crontab Tar Wildcard(通配符)注入提权)

[ Linux 长征路第四篇 ] 开发工具 vim的使用 gcc/g++的使用