1. 扩展通配符 通配符在规则中可以自动扩展,但设置在变量中或在函数的参数中通配符一般不能正常扩展。如果您需要在这些场合扩展通配符,您应该使用函数wildcard,格式如下: $(wildcard pattern...) 可以在makefile文件的任何地方使用该字符串,应用时该字符串被一列在指定目录下存在的并且文件名和给出的文件名的格式相符合的文件所代替,文件名中间由空格隔开。如果没有和指定格式一致的文件,则函数wildcard的输出将会省略。注意这和在规则中通配符扩展的方式不同,在规则中使用逐字扩展方式,而不是省略方式(参阅上节)。 使用函数wildcard得到指定目录下所有的C语言源程序文件名的命令格式为: $(wildcard *.c) 我们可以把所获得的C语言源程序文件名的字符串通过将‘.c’后缀变为‘.o’转换为OBJ文件名的字符串,其格式为: $(patsubst %.c,%.o,$(wildcard *.c)) 这里我们使用了另外一个函数:patsubst,详细内容参阅字符串替换和分析函数。 这样,一个编译特定目录下所有C语言源程序并把它们连接在一起的makefile文件可以写成如下格式: objects := $(patsubst %.c,%.o,$(wildcard *.c)) foo : $(objects) cc -o foo $(objects) 这里使用了编译C语言源程序的隐含规则,因此没有必要为每个文件写具体编译规则。 ‘:=’是‘=’的变异,对‘:=’的解释, 2. |