【转】Makefile变量
0赞
发表于 2016/10/15 11:44:22
阅读(1052)
自动化变量
$?
所有比目标新的依赖的集合,以空格分隔$@
规则中的目标文件集,如果有多个目标,那么就是匹配于目标中模式定义的集合$%
仅当目标是函数库文件中,表示规则中的目标成员名,如果不是,为空$<
依赖目标中的第一个目标的名字$^
所有依赖目标的集合,以空格分隔,去除重复的依赖目标$+
所有依赖目标的集合,不去除重复的依赖目标$*
表示目标模式中 %之前的部分$(@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来展开