0


【Linux】开发工具make/Makefile、进度条小程序

Linux

1.make/Makefile

1.什么是make和Makefile?

  1. 一个工程中的源文件不计其数,它们按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
  2. makefile 带来的好处就是 “自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  3. make 是一个解释 makefile 文件中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见 makefile 成为了一种在工程方面的编译方法。
  4. make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。
  5. 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力,makefile 中的 m 大小写都可以。

在这里插入图片描述

Makefile 文件中添加自动化清理命令

在这里插入图片描述

上面的 .PHONY: 是什么?

在这里插入图片描述
在这里插入图片描述

更加详细的过程,但不推荐这么写

在这里插入图片描述

2.stat命令

问题来了:make 命令如何知道形成可执行文件后,源文件被修改了? 答案:Modify 时间

在这里插入图片描述
在这里插入图片描述

  1. touch的盲区:后添加一个已经存在文件,会更改文件的3个时间
  2. PHONY作用:忽略 Modify 时间,所有源文件重新编译

3.Makefile单个文件的写法

更通用的写法:定义变量

在这里插入图片描述

在这里插入图片描述

4.Makefile多个文件的写法

Makefile有多个文件?

在工程中,我们一般会将所有的源文件先编译成目标文件,再将所有的目标文件与动态库进行动态链接,生成可执行程序。

在这里插入图片描述

#循环创建5个文件的命令count=1;while[$count -le 5];dotouch code${count}.c;let count++;done

在这里插入图片描述

2.进度条

1.回车\r、换行\n

  1. 回车\r:光标回到该行的第一个位置。
  2. 换行\n:光标垂直向下到下一行,光标不会回到第一个位置。

C语言中的\n:本质是 \r+\n。

2.缓冲区

在这里插入图片描述

在这里插入图片描述

若想要将没有带 \n 的字符串立刻刷新?fflush

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.进度条

1.倒计时程序

在这里插入图片描述
在这里插入图片描述

最终版本的倒计时程序

在这里插入图片描述

2.进度条程序

版本一:一次性展现进度条

在这里插入图片描述

在这里插入图片描述

版本二:边下载/上传,边更新进度条
Makefile 文件
SRC=$(wildcard *.c)OBJ=$(SRC:.c=.o)BIN=processbar

$(BIN):$(OBJ)
    gcc -o $@ $^
%.o:%.c
    gcc -c $< -std=c99
    
.PHONY:clean
clean:
    rm -rf $(OBJ)$(BIN)
process.h
#pragmaonce                                                              #include<stdio.h>voidprocess_v1();voidFlushProcess(double total,double current);
process.c
#include"process.h"#include<string.h>#include<unistd.h>#defineNUM101#defineSTYLE'#'voidFlushProcess(double total,double current){char buffer[NUM];memset(buffer,0,sizeof(buffer));constchar* lable ="|/-\\";int len =strlen(lable);//不需要循环,只需填充#int num =(int)(current *100/ total);for(int i =0; i < num; i++){
        buffer[i]= STYLE;}staticint cnt =0;
    cnt %= len;double rate = current *100/ total;printf("[%-100s][%.1f%][%c]\r", buffer, rate, lable[cnt]);
    cnt++;fflush(stdout);}voidprocess_v1(){char buffer[NUM];memset(buffer,0,sizeof(buffer));constchar* lable ="|/-\\";int len =strlen(lable);int cnt =0;while(cnt <=100){printf("[%-100s][%d%][%c]\r", buffer, cnt, lable[cnt % len]);fflush(stdout);
        buffer[cnt]= STYLE;
        cnt++;usleep(500);}printf("\n");}
main.c
#include"process.h"//函数指针typedefvoid(*callback_t)(double total,double current);double total =1024.0;//文件大小double speed =1.0;//下载速度//回调函数voidDownLoad(callback_t cb){double current =0;while(current <= total){cb(total, current);//下载代码usleep(3000);//充当下载数据
        current += speed;}printf("\ndownload %.2lfMB Done\n", current);}voidUpLoad(callback_t cb){double current =0;while(current <= total){cb(total, current);//上传代码usleep(3000);//充当上传数据
        current += speed;}printf("\nupload %.2lfMB Done\n", current);}intmain(){DownLoad(FlushProcess);UpLoad(FlushProcess);return0;}
标签: linux 小程序 apache

本文转载自: https://blog.csdn.net/2203_76003626/article/details/143798249
版权归原作者 清风~徐~来 所有, 如有侵权,请联系我们删除。

“【Linux】开发工具make/Makefile、进度条小程序”的评论:

还没有评论