当前位置:   article > 正文

Makefile学习之 all_makefile all

makefile all

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

  1. /*-------------- main1.c -----------------*/
  2. #include <stdio.h>
  3. int main( void )
  4. {
  5. printf("main1 task!\n");
  6. }
  7. /*-------------- main2.c -----------------*/
  8. #include <stdio.h>
  9. int main( void )
  10. {
  11. printf("main2 task!\n");
  12. }

  对应的Makefile如下:

  1. all : main1 main2
  2. main1 : main1.o
  3. gcc main1.o -o main1
  4. main2 : main2.o
  5. gcc main2.o -o main2
  6. %.o : %.c
  7. gcc -c $< -o $@

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

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

  

  1. all : main1 main2 clean
  2. main1 : main1.o
  3. gcc main1.o -o main1
  4. main2 : main2.o
  5. gcc main2.o -o main2
  6. %.o : %.c
  7. gcc -c $< -o $@
  8. clean :
  9. rm -f *.o

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/640952
推荐阅读
相关标签
  

闽ICP备14008679号