- make是一个命令工具, 一个用来解释makefile中指令工具
- makefile可以" 自动化编译 ", 一旦写好, 只需要一个make命令, 工程就可以自动完成编译
- make是一条命令, makefile是一个文件, 两者搭配使用, 完成项目自动化构建
- makefile里边写的为依赖关系和依赖方法, 而依赖方法必须以Tab开头
下面就以一个小程序( 进度条 )介绍一下make/Makefile的使用 :
这里先搞清一个小概念 : \r ( 回车 )和 \n ( 回车和换行 )
先看一个小程序 :
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello Makefile!");
sleep(3);
return 0;
}
如果执行上面程序会出现什么结果 ?
这是我们会发现程序在等待了三秒后才输出了想要的结果 ;
当我们将程序改为如下时,结果就能正常输出了 :
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("hello Makefile!");
//刷新输出缓冲区
fflush(stdout);
sleep(3);
return 0;
}
C函数, 如 printf 在输出时的默认输出为标准输出 如 显示器 而printf 在输出时先将消息写入输出缓冲区, 而该缓冲区是按行刷新遇到 ' /n ' 将 ' /n ' 之前输出, 所以这里使用 fflash(stdout) 来刷新缓冲区, 是printf要输出的内容直接输出
touch一个Makefile.c文件,里边内容如下 :
test:test.c
//依赖方法以Tab开头
gcc -o test test.c
//使用.PHONY将后边的标签变成伪目标
.PHONY:clean
clean:
rm -f test
一般clean目标文件时, 用 .PHONY 修饰, 伪目标的特性是, 总是被执行( 相当于可以跳过时间 )
touch一个test.c文件, 里边内柔如下 :
#include <stdio.h>
#include <unistd.h>
int main()
{
int i=0;
//初始化数组
char bar[102]={'0'};
const char *lable="|/-\\";
while(i<=100){
printf("[%-100s][%d%%][%c]\r",bar,i,lable[i%4]);
fflush(stdout);
bar[i++]='#';
usleep(100000);
}
printf("\n");
return 0;
}
当我们完成上面的一系列操作时下面来使用make命令来执行程序 :
若有出错或不懂的地方, 欢迎留言, 共同进步 !