分类:
2008-10-13 16:14:14
make和Makefile一向被用来编译、连接代码,这已经成为了思维的定势。如果能够突破这个定势,就会发现make原来还有很多妙用。
Makefile其根本原理就是利用文件时间比较来触发一个动作。比如:
file_a.obj : file_a.c gcc file_a.c - o file_a.obj
这就是一个最简单的应用。make读到这段代码时,会去比较file_a.obj和file_a.c的日期,如果file_a.c比file_a.obj还要新(就是时间晚,如2005-05-09 20:03:43 就比2003-12-07 04:03:12要新),这时候就会触发下面一行的动作。用gcc去编译file_a.c,从而重新生成file_a.obj,这就是项目编译中所做的事,通过比较时间,只编译需要编译的部分,这样比较高效、节约时间。
我们也可以利用make的原理来打patch,效果很好。比如我的项目中平台会自动生成一个ori_font.c的文件,上面是平台提供的字库。而我不需要这个字库,我要替换掉其中这个文件中字库相关的一部分内容。于是我写了一个小程序 replace_fonts.exe,通过执行replace_fonts ori_font.c pt_font.c就可以把ori_font.c给替换掉。但是汉字是很多的,这个文件也非常大。所以我不想每次编译之前都替换这个文件,我只需要在平台重新生成代码后(平台更新了ori_font.c),我才使用replace_fonts,然后再编译工程即可。于是make可以帮我这个忙。
首先我写一个Makefile:
#rpfonts.mak #for replacing fonts res fonts.obj : fonts.c replace_fonts ori_font.c pt_font.c
然后把它加入我build工程的批处理文件中:
rem build_prj.bat gnumake -f rpfonts.mak gnumake -f prj.mak
Okey,我只需像平常一样执行build_prj.bat就好了,它会在需要替换字体的时候自动给偶替换的。嘻嘻,是不是很方便呢?:p
-------------
乾坤一笑 写于2005年6月18 日 转载请标明出处和原文链接