liunx中make、makefile使用及进度条的实现
来源:互联网 发布:天刀真武捏脸数据 编辑:程序博客网 时间:2024/04/29 18:33
make makefile
在此,我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)
pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)。编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置 。
链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。
一、make和makefile的介绍
make:是一个非常重要的编译命令,本质上它是一个程序。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。
make是一个命令;
makefile是一个文件;
make命令执行时,需要一个 Makefile ⽂文件,以告诉make命令需要怎么样的去编译 和链接程序。
Makefile来告诉make命令如何编译和链接这⼏几个⽂文件。我们的规则是: 1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。 3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。
在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。记住,make并不管命令是怎么工作的,他只管执行所定义的命令。
建两个文件 main.c test.c .
main.c代码如下
1 #include<stdio.h> 2 void my_printf(); 3 int main() 4 { 5 my_printf(); 6 return 0; 7 }test.c代码如下
1 #include<stdio.h> 2 void my_printf() 3 { 4 printf("hello\n"); 5 }~
makefile文件
在此,伪目标 可以设置,自己想删除的。
完成之后, 输入命令:make (根据依赖规则生成了中间文件)完成后 (查看) ls
make clean 清除中间文件
二、make如何工作的
1、当我们只输入make命令(在默认方式下)make会在当前目录下找“makefile”或“Makefile”文件。
2、如果找到,它会找文件中的第一个目标文件。
3、如果第一个文件不存在或者第一个文件依赖后面的.o文件的文件修改时间比它新,那么他就会执行后面的文件来生成这个文件。
4、如果第一个文件依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖文件,如果找到就根据那个依赖规则生成该.o文件
5、最终用.o文件,执行第一个文件。
整个make的依赖性,他会根据依赖关系一层一层去找,直到最终编译出第一个目标文件,如果在查找过程出现错误那么make会直接退出,并报错。 而对于所定义的命令的错误,或是编译不成功,make根本不理。make只管⽂文件的依赖性,即,如果在我找了依赖关系之后,冒号后⾯面的文件还是不在,那么就停止了。
三、linux终端进度条实现
1 #include<stdio.h> 2 #include<string.h> 3 #include<unistd.h> 4 5 void progress() 6 { 7 char arr[103]; 8 char *index="|/-\\0"; 9 int i=0; 10 memset(arr,'\0',sizeof(arr)); 11 arr[0]='['; 12 arr[101]=']'; 13 arr[102]='\0'; 14 for(i;i<=100;++i) 15 { 16 arr[i+1]='='; 17 printf("%-101s[%d%%][%c]\r",arr,i,index[i%4]); 18 fflush(stdout); 19 usleep(100); 20 21 } 22 printf("\n");在上述打印过程中, 用%-101s 固定输出长度 使得是左对齐。
上述代码结构
#include<stdio.h>int main(){ printf("%10s\n","i am student"); usleep(200); return 0;}
在此情况下,先是打印出i am student,然后再等待200us;
#include<stdio.h>int main(){ printf("%10s","i am student"); usleep(200); return 0;}
去掉\n后,先是等待200us,再是将i am student输出到屏幕。
- liunx中make、makefile使用及进度条的实现
- make及makefile的使用
- linux下C/C++实现进度条(使用make/makefile)
- 文件分割,make及makefile的使用
- makefile的使用和模拟实现进度条
- make makefile 的使用
- make/Makefile&&进度条&&yum
- [make] makefile中使用include
- $(MAKE)在Makefile中使用
- make 及 Makefile 的说明
- linux下makefile配置文件及make工具的使用
- linux C中make的使用和makefile的编写
- make和Makefile的使用
- make(五)makefile中变量使用
- make(六)makefile中使用条件判断
- make(七)makefile中函数使用
- GNU Make 及Makefile的编写
- GNU Make 及Makefile的编写
- Ecshop修改后台的大分类商品数量
- 简单使用系统的设备实现二维码扫描
- Ubuntu创建启动器(快捷方式)的方式
- Git学习笔记1 神奇的git stash
- PHP预定义超全局数组 $_ENV 、$GLOBALS 讲解
- liunx中make、makefile使用及进度条的实现
- [java] abstract class 和interface 的区别
- MySQL5.7.12 Windows zip配置启动
- std::tr1::function, std::tr1::bind的使用
- android studio最操蛋的错误(1)
- Android学习之TextView显示html图片的方法
- 详细讲解Android修改键盘文字的方法
- 水平、垂直居中的若干种方法总结
- 国内优秀的Android资源你都知道吗?