一般来说,make会以unix的标准shell,也就是/bin/sh来执行命令. 【程序编程相关:2003年olap市场份额报告】
如果命令太长,你可以使用反斜框(‘\’)作为换行符.make对一行上有多少个字符没有限制.规则告诉make两件事,文件的依赖关系与如何成成目标文件. 【推荐阅读:.net的MSMQ异步调用】
如果我们想定义一系列比较类似的文件,我们很自然地就想起使用通配符.make支持三各通配符:“*”,“?”与“[...]”.这是与unix的b-shell是相同的. 【扩展信息:数据挖掘与统计学的关系】
三.在规则中使用通配符
波浪号(“~”)字符在文件名中也有比较特殊的用途.如果是“~/test”,这就表示当前用户的$home目录下的test目录.而“~hchen/test”则表示用户hchen的宿主目录下的test目录.(这些都是unix下的小知识了,make也支持)而在windows或是ms-dos下,用户没有宿主目录,那么波浪号所指的目录则根据环境变量“home”而定.
通配符代替了你一系列的文件,如“*.c”表示所以后缀为c的文件.一个需要我们注意的是,如果我们的文件名中有通配符,如:“*”,那么可以用转义字符“\”,如“\*”来表示真实的“*”字符,而不是任意长度的字符串.
好吧,还是先来看几个例子吧:
clean: rm -f *.o
上面这个例子我不不多说了,这是操作系统shell所支持的通配符.这是在命令中的通配符.
print: *.c lpr -p $? touch print
上面这个例子说明了通配符也可以在我们的规则中,目标print依赖于所有的[.c]文件.其中的“$?”是一个自动化变量,我会在后面给你讲述.
objects = *.o
上面这个例子,表示了,通符同样可以用在变量中.并不是说[*.o]会展开,不!objects的值就是“*.o”.makefile中的变量其实就是c/c++中的宏.如果你要让通配符在变量中展开,也就是让objects的值是所有[.o]的文件名的集合,那么,你可以这样:
objects := $(wildcard *.o)
... 下一页