赞
踩
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,可以实现自动化编译,还可以实现自动“打扫卫生”的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。