proxy网站,苏州企业网站建设公司,典型的软件开发模型,网络优化推广目录 前言一#xff0c;Linux项目自动化构建工具-make/makefile1. 背景2. 依赖关系和依赖方法3. 项目清理4. 使用方法和原理5. .PHONY的作用6. makefile中符号的使用 二#xff0c;进度条的实现1. 理解回车换行2. 理解行缓冲区3. 版本14. 版本2 三#xff0c;Linux上git的使… 目录 前言一Linux项目自动化构建工具-make/makefile1. 背景2. 依赖关系和依赖方法3. 项目清理4. 使用方法和原理5. .PHONY的作用6. makefile中符号的使用 二进度条的实现1. 理解回车换行2. 理解行缓冲区3. 版本14. 版本2 三Linux上git的使用1. git clone2. git status第一斧: git add第二斧: git commit -m第三斧: git push 点击跳转至上一篇文章【Linux基础】Linux中的开发工具(2)–gcc/g使用
前言
前面已经介绍了vim编辑器gcc/g等基础工具的使用。本文章的主要内容是make/makefile和git的使用和原理并且基于前面的学习完成一个基础小程序 – 进度条。
一Linux项目自动化构建工具-make/makefile
1. 背景
make是一条命令makefile/Makefile是一个文件两个搭配使用完成项目自动化构建。make是一个命令工具是一个解释makefile/Makefile中指令的命令工具。makefile/Makefile带来的好处就是 – “自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。
2. 依赖关系和依赖方法 3. 项目清理 4. 使用方法和原理 1. makefile文件会被make从上到下开始扫描第一个目标名是缺省形成的。如果我们想执行其它组的依赖关系和依赖方法就要make name。 2. make/makefile在执行gcc命令的时候如果发生了语法错误就会终止。 3. make解释makefile的时候是会自动推导的。一直推导推导过程不执行依赖方法直到推导有依赖文件的存在然后再逆向执行所有的依赖方法。 5. .PHONY的作用
想要解释.PHONY的作用我们只需对比有它和没有它时的结果现象再进行分析即可。 所以.PHONY让目标文件对应的方法总是被执行的。 进行分析 6. makefile中符号的使用 1. %makefile语法中的通配符。比如%.c把当前目录下所有的.c文件展开到依赖列表中。 2. $把依赖关系冒号右侧的依赖文件一个一个的交给gcc -c选项形成同名的.o文件。 3. 可定义变量makefile中也可以定义变量但是没有类型名称随意取。比如binsrc。 4. $()理解为类似指针解引用的效果。 5.$ 目标文件。 6.$ ^所有的依赖文件列表。 我们平时编译代码一般直接用.c源文件生成可执行程序如下 当然也可以使用.PHONY生成多个可执行程序 二进度条的实现
使用vimgcc/gmake/makefile写一个偏系统的样例程序 – 进度条。
1. 理解回车换行 2. 理解行缓冲区
先来观察两段代码的运行现象 所以缓冲区是一段内存输出的字符串会先暂存在缓冲区中但是\n会强行把字符串刷出缓冲区。 缓冲区刷新策略 使用fflush(stdout); 进度条的实现也采用多文件形式 process.h放函数声明 process.c放函数的实现 main.c调用函数 3. 版本1
根据上面的两点理解先实现一个简易的进度条。
process.h
#pragma once
#include stdio.hvoid proce();main.c
#include process.hint main()
{proce();return 0;}process.c
#include process.h
#include string.h
#include unistd.h// version1
#define NUM 101#define STYLE1 ##define STYLE2 #define STYLE3 *void proce(){int cnt 0;char bar[NUM];memset(bar, \0,sizeof(bar));//旋转光标char label[] {|,/,-,\\};int len strlen(label);while(cnt 100){printf([%-100s] [%d%%] [%c] \r,bar, cnt, label[cnt%len]);fflush(stdout); //强制刷新缓冲区bar[cnt] STYLE2;if(cnt NUM){bar[cnt-1] \0;printf([%-100s] [%d%%] [%c] \r,bar, cnt-1, label[cnt%len]);break;}bar[cnt] ;usleep(50000);}printf(\n\r);}4. 版本2
模拟真实的下载文件时的下载进度
process.h
#pragma once
#include stdio.hvoid FlushProcess(double current, double total);process.c
#include process.h
#include string.h
#include unistd.h#define NUM 101
#define STYLE //version2void FlushProcess(double current, double total){// 1. 更新当前进度条的百分比double rate (current / total)*100// 2. 更新进度条主体 1% 更新一个等号char bar[NUM];memset(bar, \0, sizeof(bar));for(int i 0; i (int)rate; i){bar[i] STYLE;}// 3. 更新旋转光标或其他风格const char* label |/-\\;static int num 0;num;int len strlen(label);num % len;printf([%-100s] [%.1lf%%][%c]\r, bar, rate, label[num]);fflush(stdout);}main.c
#include process.h
#include time.h
#include stdlib.h
#include unistd.htypedef void(*Flush_t)(double current, double total);// 这是一个刷新的函数指针类型double total 2048.0; // 2048MBint base 100; double once 0.5; // 0.1MB//进度条的调用方式void download(Flush_t f){// 模拟下载过程double current 0.0;while(current total){int r rand() % base 1; // [1, 10]current r * once;if(current total) current total;usleep(50000);// 更新除本次新的下载量// 根据真实的应用场景进行动态刷新f(current, total);}printf(\n);}int main(){srand(time(NULL));download(FlushProcess);return 0;
}三Linux上git的使用
注下面介绍的git指令是最简单最基础的git操作。也是建立在大家已经拥有自己的gitee或github的基础上。
1. git clone 使用git clone [地址链接] 功能获取远端仓库使本地与远端建立联系。 2. git status 使用git status 功能查看git仓库的状态。 下面的三条指令是git上传三板斧:
第一斧: git add 使用git add [文件名] 功能把文件添加到git的暂存区 第二斧: git commit -m 使用git commit -m 功能相当于一个提交记录 注-m选项不能少引号里面是写类似于日志的内容一定要写并且不能乱写 第三斧: git push 使用git push 功能实现本地仓库与远程仓库的同步