Makefile
Makefile是一个普通的文本文件,记录的是项目的构建流程规则
用法:
vim Makefile
目标对象:[依赖对象]
tab 要执行的命令
Makefile的解释规则:
make在Makefile中寻找第一个目标对象名称
若没有找到:认为没有需要生成的对象,报错退出
若找到了:检测目标对象文件是否存在:
目标对象文件若存在:判断是否有依赖对象名称:
若没有依赖对象名称:认为目标对象已经生成,不需要重新执行命令生成
若有依赖对象名称:判断依赖对象文件是否存在:
若存在:判断目标对象文件与依赖对象文件的时间关系
若不存在:在Makefile中继续向下查找依赖对象的生成规则
依赖对象在下一条规则中作为目标对象被生成,进而生成第一个目标对象后退出
目标对象文件不存在:
直接执行命令生成
Makefile预定义变量:
$@:目标对象
$^: 依赖对象
$<:依赖对象中的第一个
所以上面的Makefile我们也可以这样写:
make
make是一个命令工具,用来解释Makefile中指令的命令工具
用法:在当前目录下敲击make命令,make程序就会到当前目录寻找Makefile文件,逐行解释
make和Makefile搭配使用,可以完成项目的自动化构建,极大的提高了软件开发的效率
Linux下的第一个程序——进度条程序
#include<unistd.h>
#include<string.h>
#include<stdio.h>
int main() {
int i=0;
char bar[102];
memset(bar,0,sizeof(bar)); //初始化数组,避免野值
const char *lable="|/-\\";
while(i<=100) {
printf("[%-100s][%d%%][%c]\r",bar,i,lable[i%4]);
fflush(stdout); //清除读写缓冲区
bar[i++]='#';
usleep(10000); //用于休眠
}
printf("\n");
return 0;
}
运行结果:
进度条这个程序,主要是用来理解缓冲区
printf并不会直接将数据写入终端显示文件,而是将数据先写入到一块缓冲区中(标准输出缓冲区)。
目的是为了提高写入效率(将碎片化的数据集中写入文件),等到手动刷新缓冲区或者缓冲区内容写满的时候才会将数据写入文件;
printf中的\n具有刷新缓冲区(将数据写入文件)的作用,主要作用还是换行
printf中的\r是回车作用,将输出起始位置移动到行首
在这个程序中fflush()用来清除读写缓冲区,如果没有fflush(),就会看到进度条是一段一段的增长的,有兴趣的可以把fflush()这一行注释起来运行试试。(注意每次修改完代码别忘了重新make!!!)