Makefile学习之 all

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012351051/article/details/88626891

    Makefile中本身是没有 all 指令的,这里只不过是一种约定,认为目标 all 可以同时做很多事儿,也就能能同时生成多个目标,举例1-代码如下:

/*-------------- main1.c -----------------*/
#include <stdio.h>

int main( void )
{
    printf("main1 task!\n");
}

/*-------------- main2.c -----------------*/
#include <stdio.h>

int main( void )
{
    printf("main2 task!\n");
}

  对应的Makefile如下:

all : main1 main2

main1 : main1.o
    gcc main1.o -o main1

main2 : main2.o
    gcc main2.o -o main2

%.o : %.c
    gcc -c $< -o $@

  我们知道,一个Makefile中只有一个最终目标,就是第一个目标,上面的代码中,显然就是 all,那么all的依赖元素有2个,分别为main1和main2,而make具有自动推导,make在生成all的时候,自然要自动推导出main1和main2,这样我们就能通过一个Makefile生成了2个目标,分别是main1和main2,而这两个都是可执行程序,很巧妙的用法。

    上面的代码还只是为了说明问题,我们再进一步举例,来实现,既能生成2了个目标,同时删除中间文件*o,只需要修改Makefile如下:

  

all : main1 main2 clean

main1 : main1.o
    gcc main1.o -o main1

main2 : main2.o
    gcc main2.o -o main2

%.o : %.c
    gcc -c $< -o $@

clean :
    rm -f *.o

  那么执行make后,能够生成2个执行文件main1和main2,同时还能够删除掉编译输出文件.o.

  小结:由于make的自动推导功能,一个目标的依赖既可以是中间文件,也可以是其他目标,这以功能,使得我们可以同时生成多个目标,并且可以通过一些特殊目标,比如clean,可以实现自动化编译,还可以实现自动“打扫卫生”的功能。

猜你喜欢

转载自blog.csdn.net/u012351051/article/details/88626891
ALL