Makefile重点常用技巧二(通配符、文件搜索、自动化变量、=、:=、?=)

Makefile中的*通配符:
举例说明:
print: * .c
目标 print 依赖于所有的[.c]文件。
objects = * .o
上面例子表示了,通符同样可以用在变量中。并不是说[* .o]会展开,objects的值就是“* .o”。
如果你要让通配符在变量中展开,也就是让 objects 的值是所有[.o]的文件名的集合,那么,你可以这样:
objects := $ (wildcard *.o)
这种用法由关键字“wildcard”指出。
Makefile中的文件搜索(前提都是在当前目录没有找到):
(1)特殊变量“VPATH”
VPATH = src:…/headers
上面的的定义指定两个目录,“src”和“…/headers”,make 会按照这个顺序进行搜索。目录由“冒号”分隔。
(2)关键字“vpath”;它可以指定不同的文件在不同的搜索目录中。它的使用方法有三种:
1、vpath < pattern> < directories>
为符合模式< pattern>的文件指定搜索目录< directories>。
2、vpath < pattern>
清除符合模式< pattern>的文件的搜索目录。
3、vpath
清除所有已被设置好了的文件搜索目录。
< pattern>指定了要搜索的文件集,而< directories>则指定了< pattern>的文件集的搜索的目录。
eg:
vpath %.h …/headers
该语句表示,要求 make 在“…/headers”目录下搜索所有以“.h”结尾的文件。(如果
某文件在当前目录没有找到的话)
“$ <”和“$ @”则是自动化变量,
“$ <”表示所有的依赖目标集(也就是“foo.c bar.c”),
“$ @”表示目标集(也就是“foo.o bar.o”)。
eg:(1)等价于(2)
(1)
objects = foo.o bar.o
all: $(objects)
$ (objects): %.o: %.c //这句的意思是将objects中.o后缀的全部变成.c 后缀
//等价于$(objects):foo.c bar.c
$(CC) -c $(CFLAGS) $< -o $@
(2)
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o
命令执行:
如果你要让上一条命令的结果应用在下一条命令时,你应该使
用分号分隔这两条命令。比如你的第一条命令是 cd 命令,你希望第二条命令得在 cd 之后的
基础上运行,那么你就不能把这两条命令写在两行上,而应该把这两条命令写在一行上,用
分号分隔。
eg:
(1)
exec:
cd /home/hchen
pwd
(2)
exec:
cd /home/hchen; pwd
当我们执行“make exec”时,第一个例子中的 cd 没有作用,pwd 会打印出当前的
Makefile 目录,而第二个例子中,cd 就起作用了,pwd 会打印出“/home/hchen”。
=、:=、?=
=代表赋的值不
但与前面的变量有关,并且也与后面的变量有关。
:=代表赋的值只与后面的变量有关。
?=举例说明:
FOO ?= bar
其含义是,如果 FOO 没有被定义过,那么变量 FOO 的值就是“bar”,
如果 FOO 先前被定义过,那么这条语将什么也不做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值