2009-12-24 19:48
1.定义的宏是makefile文件全局范围解析还是逐行解析呢?
...
STR=t1
t1:
@echo $(STR)
STR+= t2
t2:
@echo $(STR)
执行make t1和make t2竟然,结果相同,都是t1 t2。这说明是全局范围解析,这对包含多个子模块的#include abc.def情形,更具提示意义。也就是说如果在abc.def内引用$(STR)的话,也会受到同被这个makefile所包含的其他的xxx.def以及makefile自身所影响,当然一在abc.def内添加STR的值,倒不太可能会引用$(STR)。当然如果不是include abc.def,而是make -f ../m.mak 或者 make -C ../m,那就不会有这样的裙带牵连了。
2.后缀指定。.SUFFIXES和.SUFFIXES .c .h .s .d
%o:%c
...
%o:%s
...
仅仅说明的是*.o可以由*.c和*.s生成,但是并没有说只由*.c和*.s生成!所以得加上
.SUFFIXES #cancel all default suffixes to be searched
.SUFFIXES .c .h .s .d #customization only to *.c *.h *.s *.d
%o:%c
...
%o:%s
...
如若不然,编译一个s1.o,makefile会不辞辛劳的沿着vpath把s1.bas,s1.pas,s1.html等等都要过问一遍。如果再加上Dynamic View的配合,肯定会延迟得相当可观的。难怪,不少coder可以make一次的时间内,喝上一杯茶:)
3.准备在明天的时间里,记录一次利用默认规则来改写makefile和*.def的实战经历。
今天就先歇了吧,Make file,make life.
http://tkoc.blog.sohu.com/140464476.html