网站谁建设的,7373网页游戏大全,怎么下载四川人社app,承德市网站建设#x1f4d8;北尘_#xff1a;个人主页 #x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上#xff0c;不忘来时的初心 文章目录 一、Linux项目自动化构建工具-make/Makefile1、背景2、实例代码3、依赖关系4、依赖方法5、原理… 北尘_个人主页 个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上不忘来时的初心 文章目录 一、Linux项目自动化构建工具-make/Makefile1、背景2、实例代码3、依赖关系4、依赖方法5、原理6、项目清理 二、Linux第一个小程序进度条1、\r\n2、行缓冲区概念3、进度条代码 一、Linux项目自动化构建工具-make/Makefile
1、背景
会不会写makefile从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数其按类型、功能、模块分别放在若干个目录中makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译哪些文件需要重新译甚至于进行更复杂的功能操作。makefile带来的好处就是——“自动化编译”一旦写好只需要一个make命令整个工程完全自动编译极大的提高了软件开发的效率。make是一个命令工具是一个解释makefile中指令的命令工具一般来说大多数的IDE都有这个命令比如Delphi的makeVisual C的nmakeLinux下GNU的make。makefile都成为了一种在工程方面的编译方法。make是一条命令makefile是一个文件两个搭配使用完成项目自动化构建。 2、实例代码 我们首先创建一个text.c文件 然后vim打开text.c文件进行编辑编辑完后退出 创建一个makefile文件并vim打开进行编写 并使用make指令进行操作 3、依赖关系
上面的文件 text ,它依赖 text.o text.o , 它依赖 text.s text.s , 它依赖 text.i text.i, 它依赖 text.c 4、依赖方法
gcc text.* -option text.* ,就是与之对应的依赖关系 5、原理
make是如何工作的,在默认的方式下也就是我们只输入make命令。那么
make会在当前目录下找名字叫“Makefile”或“makefile”的文件。如果找到它会找文件中的第一个目标文件target在上面的例子中他会找到“text”这个文件并把这个文件作为最终的目标文件。如果text文件不存在或是text所依赖的后面的text.o文件的文件修改时间要比text这个文件新可以用 touch 测试那么他就会执行后面所定义的命令来生成hello这个文件。如果text所依赖的text.o文件不存在那么make会在当前文件中找目标为text.o文件的依赖性如果找到则再根据那一个规则生成text.o文件。这有点像一个堆栈的过程当然你的C文件和H文件是存在的啦于是make会生成 text.o 文件然后再用 text.o 文件声明make的终极任务也就是执行文件text了。这就是整个make的依赖性make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。在找寻的过程中如果出现错误比如最后被依赖的文件找不到那么make就会直接退出并报错而对于所定义的命令的错误或是编译不成功make根本不理。make只管文件的依赖性即如果在我找了依赖关系之后冒号后面的文件还是不在那么对不起我就不工作啦。 6、项目清理
工程是需要被清理的像clean这种没有被第一个目标文件直接或间接关联那么它后面所定义的命令将不会被自动执行不过我们可以显示要make执行。即命令——“make clean”以此来清除所有的目标文件以便重编译。但是一般我们这种clean的目标文件我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是总是被执行的。可以将我们的 hello 目标文件声明成伪目标测试一下。 二、Linux第一个小程序进度条
1、\r\n
‘\r’是回车前者使光标到行首carriage return’\n’是换行后者使光标下移一格。 老式enter键 2、行缓冲区概念 1、什么现象 #include stdio.h
int main()
{printf(hello Makefile!\n);sleep(3);return 0;}2、什么现象 #include stdio.h
int main()
{printf(hello Makefile);sleep(3);return 0;
} 3、什么现象 #include stdio.h
int main()
{printf(hello Makefile!);fflush(stdout);sleep(3);return 0;
}3、进度条代码 1、版本一 #includestdio.h
#includeunistd.h
#includestring.h
#includestdlib.h
const char* lable|/-\\;
int main()
{char buffer[NUM];memset(buffer, \0, sizeof(buffer));int cnt 0;int n strlen(lable);buffer[0] Head;while(cnt 100){printf([%-100s][%3d%%][%c]\r, buffer, cnt, lable[cnt%n]);fflush(stdout);buffer[cnt] ;if(cnt 100) buffer[cnt] ;usleep(50000);}printf(\n);
} 2、版本二 跟下载速度牵连 #includestdio.h
#includeunistd.h
#includestdlib.h
#includestring.h
#includetime.h
typedef void (*callback_t)(double);
define max 103
define size 1024*1024*1024
const char* lable|/-\\;
char buffer[max]{0};
void process_flush(double rate){static int cnt 0;int n strlen(lable);if(rate 1.0) buffer[0] ;printf([%-100s][%.1f%%][%c]\r, buffer, rate, lable[cnt%n]);fflush(stdout);buffer[(int)rate] ;if((int)rate1 100) buffer[(int)(rate1)] ; if(rate100.0) printf(\n);cnt;cnt%n;}
void download(){srand(time(NULL)^1023);int totalsize;while(total){int onerand()%(1024*1024);total-one;if(total0) total0;int downloadsize-total;double rate (download*1.0/(size))*100.0;process_flush(rate);}}int main(){download();}