Linux项目自动化构建工具-make/Makefile

  • 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命令来执行程序 :

若有出错或不懂的地方,​ 欢迎留言, 共同进步 !

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/82531365