Makefile中的通配符

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 

Makefile 是可以使用 shell 命令的,所以 shell 支持的通配符在 Makefile 中也是同样适用的。 shell 中使用的通配符有:"*","?","[...]"。

通配符 使用说明
* 匹配0个或者是任意个字符
匹配任意一个字符
[] 我们可以指定匹配的字符放在 "[]" 中

通配符可以出现在模式的规则中,也可以出现在命令中,详细的使用情况如下。

实例 1:

.PHONY:clean
clean:
    rm -rf *.o test

这个实例可以说明通配符可以使用在规则的命令中,表示的是任意的以 .o 结尾的文件。

实例 2:

test:*.c
    gcc -o $@ $^

这个实例可以说明通配符还可以使用在规则的依赖中,用来表示所有的以 .c 结尾的文件。

通配符使用在规则的依赖中时,切记不能通过引用变量的方式来使用,如下所示。

OBJ=*.c
test:$(OBJ)
    gcc -o $@ $^

执行make的时候,会提示没有 "*.c" 文件。实例中我们想要表示当前目录下所有的 ".c" 文件,但是使用的时候并没有展开,而是直接识别成了一个文件,文件名是 "*.c"。

如果一定要引用变量的话,要使用函数 "wildcard",这个函数会帮我们展开,如下。

OBJ=$(wildcard *.c)
test:$(OBJ)
    gcc -o $@ $^

和通配符 "*" 类似, "%"也是匹配任意个字符,如下:

test:test.o test1.o
    gcc -o $@ $^
%.o:%.c
    gcc -o $@ $^

 "%.o" 把我们需要的所有的 ".o" 文件组合成为一个列表,从列表中挨个取出的每一个文件;"%" 表示所取出来的文件的文件名(不包含后缀),然后找和 "%"名称相同的 ".c" 文件作为依赖文件,接着执行下面的命令,直到列表(所有.o文件组合成的列表)中的文件全部被取出来为止。

这个属于 Makefile 中静态模规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件。跟我们的多规则目标的意思相近,但是又不相同。

你可能感兴趣的:(#,Makefile,运维,bash)