【make/Makefile】Linux下进度条的设计与实现

简介: 【make/Makefile】Linux下进度条的设计与实现

一、简单介绍make/Makefile

Makefile 和 makefile 不区分大小写,但是一定只能是 “makefile” !!!

make 是一个指令,makefile 是一个文件

Makefile 格式形式:

  • 使用 make 生成目标文件时,默认从上到下扫描 Makefile 文件,默认形成的是第一个目标文件——默认只生成一个

二、进度条的设计与实现

进度条应与实际的业务结合,单独存在没有意义。因此,下面模拟了一个下载场景,结合下载场景完成进度条的设计。

【Makefile 文件】
processbar:test.o processbar.o
  gcc -o $@ $^
test.o:test.c
  gcc -c test.c
processbar.o:processbar.c
  gcc -c processbar.c

.PHONY:clean
clean:
  rm -f processbar test.o processbar.o            
【processbar.h】
  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <unistd.h>
  4 #include <stdlib.h>
  5 #include <time.h>
  6 
  7 
  8 #define MAX 103
  9 
 10 #define Head '>'
 11 #define Body '='
 12 
 13 void process_fflush(double rate);  
【processbar.c】
  1 #include "processbar.h"
  2 
  3                                                                   
  4 char* spit = "-\\|/";
  5                      
  6 char buff[MAX] = {0};           
  7 void process_fflush(double rate)
  8 {                                  
  9     static int cnt = 0;  
 10     int n = strlen(spit);                                     
 11     if (rate < 0.5) buff[0] = Head;
 12                                                               
 13     printf("[%-100s][%.1f%%][%c]\r", buff, rate, spit[cnt%n]);
 14     fflush(stdout);        
 15     buff[(int)rate] = Body;                        
 16     if ((int)rate < 99) buff[(int)rate + 1] = Head;
 17                                     
 18     cnt++;
 19                                     
 20     if (rate >= 100.0) printf("\n");
 21 }
【test.c】
  1 #include "processbar.h"
  2 
  3 #define FILE_SIZE 1024*1024*1024
  4 
  5 void download()
  6 {
  7     int total = FILE_SIZE;
  8     srand(time(NULL)^1023);
  9     while (total)
 10     {
 11         usleep(20000);
 12         int one = rand()%(2 * 1024 * 1024);
 13         total -= one;
 14         if (total < 0)
 15             total = 0;
 16         
 17         int download = FILE_SIZE - total;
 18         double rate = (download * 1.0 / (FILE_SIZE)) *100;
 19         process_fflush(rate);
 20     }
 21 }
 22 
 23 int main()
 24 {
 25     download();
 26     return 0;
 27 }  
相关文章
|
4月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
207 0
|
9月前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
121 20
[Linux工具] Makefile
|
8月前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
390 20
|
8月前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
148 16
|
10月前
|
Linux Android开发 开发者
linux m、mm、mmm函数和make的区别
通过理解和合理使用这些命令,可以更高效地进行项目构建和管理,特别是在复杂的 Android 开发环境中。
459 18
|
12月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
127 0
Linux c/c++之makefile的基础使用
|
12月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
364 0
|
Linux 开发工具
linux下使用gcp拷贝数据的时候显示进度条
linux下使用gcp拷贝数据的时候显示进度条
123 2
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
87 0
|
Linux 开发工具 C语言
韦东山Linux教学视频中的makefile文件详细介绍
韦东山Linux教学视频中的makefile文件详细介绍
348 0