【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 }  
相关文章
|
2月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
19 0
Linux c/c++之makefile的基础使用
|
2月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
4月前
|
Linux 开发工具
linux下使用gcp拷贝数据的时候显示进度条
linux下使用gcp拷贝数据的时候显示进度条
31 2
|
5月前
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
35 0
|
5月前
|
Java Linux 编译器
编写和使用Linux Makefile
编写和使用Linux Makefile
|
6月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
98 0
|
Linux 开发工具 C语言
韦东山Linux教学视频中的makefile文件详细介绍
韦东山Linux教学视频中的makefile文件详细介绍
198 0
|
Linux Windows 程序员