Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569275
  • 博文数量: 114
  • 博客积分: 1620
  • 博客等级: 上尉
  • 技术积分: 1104
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 09:16
文章分类

全部博文(114)

文章存档

2016年(1)

2015年(2)

2014年(4)

2013年(9)

2012年(20)

2011年(78)

分类: LINUX

2011-05-04 15:11:23

原文地址:
 
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 文件):
情况一
  1. OBJTREE = /root/Makefile
  2. src = $(wildcard $(OBJTREE)/include/config.mk)
  3. all:
  4.         @echo $(src)

输出:
引用
# make
/root/Makefile/include/config.mk


情况二
  1. OBJTREE = .
  2. src = $(wildcard $(OBJTREE)/include/config.mk)
  3. all:
  4.         @echo $(src)

输出:
引用
# make
./include/config.mk


情况三
  1. OBJTREE = hello
  2. src = $(wildcard $(OBJTREE)/include/config.mk)
  3. all:
  4.         @echo $(src)

输出:
引用
# make
/*输出内容为空*/


对比上面 3 种情况可以看到,wildcard 也可以用来匹配变量,即这个变量可以是任意的情况。只是注意,wildcard 的核心是“匹配存在的文件”!像上面,将 OBJTREE 变量设为 hello ,当然是不可能找到 hello/include/config.mk 这个不存在的文件的,所以它的输出为空;而将正确的路径赋给 OBJTREE 时,它最后就能够正常的输出。

阅读(2711) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~