原文地址:
wildcard 用来明确表示通配符。因为在 Makefile 里,变量实质上就是 C/C++ 中的宏,也就是说,如果一个表达式如 objs = *.o ,则 objs 的值就是 *.o ,而不是表示所有的 .o 文件。若果要使用通配符,那么就要使用 wildcard 来声明 * 这个符号,使 * 符号具有通配符的功能。如下举例:
在当前目录下随意建立两个 *.c 文件,如 hello.c 和 world.c ,现在编写一个 Makefile 如下:
引用
src = $(wildcard *.c /usr/src/linux-2.6.24/drivers/char/ip2/*.c)
all:
@echo $(src)
运行输出:
引用
# make
hello.c world.c /usr/src/linux-2.6.24/drivers/char/ip2/i2cmd.c /usr/src/linux-2.6.24/drivers/char/ip2/i2ellis.c /usr/src/linux-2.6.24/drivers/char/ip2/i2lib.c /usr/src/linux-2.6.24/drivers/char/ip2/ip2.mod.c /usr/src/linux-2.6.24/drivers/char/ip2/ip2base.c /usr/src/linux-2.6.24/drivers/char/ip2/ip2main.c /usr/src/linux-2.6.24/drivers/char/ip2/ip2main.mod.c
上面输出了当前目录下的两个 .c 文件以及/usr/src/linux-2.6.24/drivers/char/ip2/ 目录下所有的 .c 文件。
wildcard 也可以用来匹配变量。
比较以下几个代码(假设和 Makefile 文件同目录下已经有 include/config.mk 文件):
情况一:
- OBJTREE = /root/Makefile
- src = $(wildcard $(OBJTREE)/include/config.mk)
-
- all:
- @echo $(src)
输出:
引用
# make
/root/Makefile/include/config.mk
情况二:
- OBJTREE = .
- src = $(wildcard $(OBJTREE)/include/config.mk)
-
- all:
- @echo $(src)
输出:
引用
# make
./include/config.mk
情况三:
- OBJTREE = hello
- src = $(wildcard $(OBJTREE)/include/config.mk)
-
- all:
- @echo $(src)
输出:
引用
# make
/*输出内容为空*/
对比上面 3 种情况可以看到,wildcard 也可以用来匹配变量,即这个变量可以是任意的情况。只是注意,wildcard 的核心是“匹配存在的文件”!像上面,将 OBJTREE 变量设为 hello ,当然是不可能找到 hello/include/config.mk 这个不存在的文件的,所以它的输出为空;而将正确的路径赋给 OBJTREE 时,它最后就能够正常的输出。
阅读(2711) | 评论(0) | 转发(0) |