Makefile与进度条

一、前言

        会不会写makefile,从⼀个侧⾯说明了⼀个⼈是否具备完成⼤型⼯程的能⼒,⼀个⼯程中的源⽂件不计数,其按类型、功能、模块分别放在若⼲个⽬录中,makefile定义了⼀ 系列的规则来指定,哪些⽂件需要先编译,哪些⽂件需要后编译,哪些⽂件需要重新编译,甚⾄ 于进⾏更复杂的功能操作。

        Makefile最初由贝尔实验室的Stuart Feldman在1977年创建,至今仍是C/C++项目中最常用的构建工具之一,也被广泛应用于其他语言的构建流程中。

二、make与makefile

        1.什么是make?什么是makefile?

                make是⼀条命令,makefile是⼀个⽂件,两个搭配使⽤,完成项⽬⾃动化构建。

        2.makefile的代码展示及解析
SRC=$(shell ls *.c)
BIN=$(SRC:.c=.o)
TFILE=tar
CC=gcc
METHOD1= -o
RM=rm -f
METHOD2= -c

$(TFILE):$(BIN)
	@$(CC) $(METHOD1) $@ $^
	@echo "link > > > $@ to $^"
%.o:%.c
	@$(CC) $(METHOD2) $<
	@echo "generet > > > .c to .o"
.PHONY:clean
clean:
	@$(RM) $(BIN) $(TFILE)
	@echo "remove $(BIN) and $(TFILE)"

其中:

        1. “  =  ”,可以理解成类似于宏定义,让其更美观。

        2.“  $()  ”,引用定义的变量。

        3.“  @  ”, 隐藏指令,让指令不回显在屏幕中。

        4.“  $@ ”,目标文件。

        5.“  $^ ”,所有的依赖文件。

        6.“ %.c  %.o ”,当前列表中所有以.c、.o为后缀的文件。

        7.“  $< ”,第一个依赖文件。

        8.“  echo ”,让引号内的字符串显示在屏幕中。

        3、.PHONY的修饰

                .PHONY后面修饰的为伪目标,表示这这个指令总是被执行的。那么什么叫总是被执行呢?如何区分?我们知道,文件 = 属性 +  内容,文件当中有三个时间:

其中,Access时间只要你查看了时间就会更新,

           Modify时间只有在文件的内容修改后才会更新,

           Change时间在内容的属性修改之后才会修改,但属性包含文件的大小、时间、权限等等,因此通常情况下,修改文件的内容就会引起改变。

                没有.PHONY修饰的情况下,受到Modify时间是否变化限制,多次执行不被允许,如图:

若被修饰,则不被限制可以多次执行:

三、进度条代码的实现

        两个版本的实现,理论版和实际模拟版本。

#pragma once
#include<stdio.h>
#include<unistd.h>
#include<string.h>

void process();//版本1
void process_max(double progress,double total);//版本2

//.h文件
#include"process_bar.h"
#define N 101
#define picture '='

//实现文件
void process_max(double progress,double total){
  char buff[N];
  memset(buff,0,sizeof(char)*100);
  char str[]="|/-\\";
  int len = strlen(str);

  int num = progress*100/total;
  int i=0;
  for(i =0;i<num;i++){
    buff[i] = picture;
  }
  double numb = progress*100/total;
  static int cnt=0;
  printf("[%-100s][%.2lf%%][%c]\r",buff,numb,str[cnt%len]);
  fflush(stdout);
  sleep(1);
  cnt++;
}

void process(){
  char buff[N];
  memset(buff,0,sizeof(char)*100);
  char str[]="|/-\\";
  int len = strlen(str);
  int count = 0;
  while(count<=100){
    buff[count]= picture;
    printf("[%-100s][%d%%][%-c]\r",buff,count,str[count%len]);
    
    fflush(stdout);
    sleep(1); 
    count++;
  }
  printf("\n");
} 
#include"process_bar.h"
#define downlode 1024.0
#define speed 1.0
void downprocess(){
  int current = 0; 
  while(current<=downlode){
    current+=speed;
    process_max(current,downlode);
  }
  printf("\nthe resource is downloded complete\n");
}

//主文件

int main(){
 // process();
  downprocess();
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值