【转】Makefile变量
0赞
发表于 10/15/2016 11:44:22 AM
阅读(2334)
自动化变量
$? 所有比目标新的依赖的集合,以空格分隔$@ 规则中的目标文件集,如果有多个目标,那么就是匹配于目标中模式定义的集合$% 仅当目标是函数库文件中,表示规则中的目标成员名,如果不是,为空$< 依赖目标中的第一个目标的名字$^ 所有依赖目标的集合,以空格分隔,去除重复的依赖目标$+ 所有依赖目标的集合,不去除重复的依赖目标$* 表示目标模式中 %之前的部分$(@D) 表示$@的目录部分(不以\结尾)$(@F) 表示$@的文件部分
。。。另外6个同理
赋值
= 是最基本的赋值,会把整个makefile展开之后再决定是多少
x=foo
y=$(x)bar #y是asdbar,不是foobar
x=asd
:= 是覆盖之前的值,和=不同,和赋值的位置有关
x=foo
y:=$(x)bar #y是foobar
x=asd
?= 是如果没有被赋值过就赋予等号后面的值,赋过了就不管了+= 是添加等号后面的值
变量替换
makefile中有两种变量替换,
- 形如
$(var:a=b)或者${var:a=b},是把var中以a结尾的变量替换为b - 形如
foo:=a.o b.o c.o bar:=$(foo:%.o=%.c)则bar中是a.c b.c c.c
VPATH
如果没有指明VPATH变量,make只会在当前目录中去寻找依赖文件和目标文件,如果定义了VPATH,则make会在当前目录找不到的情况下,到所制定的目录中去找文件
VPATH=src:../headers
VPATH也可以用来搜索文件,通常有三种用法:
VPATH 为符合模式的文件指定搜索目录
VPATH 清除符合模式的文件的搜索目录
VPATH 清除所有已被设置好了的文件搜索目录
这里,需要包含 “%”字符,eg: vpath %.h ../headers
如果多条vpath语句中出现了重复的,则会按照先后顺序搜索
print: .c #依赖关系的通配符会被自动展开,表示print目标依赖于所有的.c 文件
object=.c #变量中的通配符不会被展开object就是 “.c”需要使用wildcard来展开
