《你知道Makefile变量具体是怎样的?.doc》由会员分享,可在线阅读,更多相关《你知道Makefile变量具体是怎样的?.doc(2页珍藏版)》请在三一文库上搜索。
1、你知道Makefile变量具体是怎样的?自定义变量=是最基本的赋值,会把整个makefile展开之后再决定是多少x=fooy=$(x)bar #y是asdbar,不是foobarx=asd:=是覆盖之前的值,和=不同,和赋值的位置有关x=fooy:=$(x)bar #y是foobarx=asd?=是如果没有被赋值过就赋予等号后面的值,赋过了就不管了+=是添加等号后面的值变量的使用和shell一样,makefile通过$(FLAGS)来读取变量FLAGS的值,对于$本身,使用$读取变量替换注意这两种替换的方式都得使用变量名,不能使用变量的内容,即不能写成诸如$($(VAR):o=a)的形式,其他
2、返回内容的函数也不行,均会导致替换的失败makefile中有两种变量替换,形如$(var:a=b)或者$var:a=b,是把var中以a结尾的变量替换为bOBJ=./obj/test.oOBJ2=$(OBJ:o=a)all:echo OBJ:$(OBJ)echo OBJ2:$(OBJ2)#$make allOBJ:./obj/test.oOBJ2:./obj/test.a使用模式匹配的方式表示替换内容OBJ=./obj/test.oOBJ2=$(OBJ:%.o=%.a)all:echo OBJ:$(OBJ)echo OBJ2:$(OBJ2)#$make allOBJ:./obj/test.oO
3、BJ2:./obj/test.a自动化变量?所有比目标新的依赖的集合,以空格分隔,通常用他们的值,即$?规则中的目标文件集,如果有多个目标,那么就是匹配于目标中模式定义的集合,通常用他们的值,即$%仅当目标是函数库文件中,表示规则中的目标成员名,如果不是,为空,通常用他们的值,即$%rsvpathvpath是一个指令,可以用来搜索文件,通常有三种用法:VPATH 为符合模式的文件指定搜索目录VPATH 清除符合模式的文件的搜索目录VPATH清除所有已被设置好了的文件搜索目录这里,需要包含%字符,eg:vpath %.h ./headers如果多条vpath语句中出现了重复的,则会按照先后顺序搜
4、索print: *.c#依赖关系的通配符会被自动展开,表示print目标依赖于所有的.c 文件object=*.c#变量中的通配符不会被展开object就是 “.c”需要使用wildcard来展开例子#Makefile文件CC:=gccCFLAGS:= -O2 -I ./includeTARGET:=linkstackOBJS:=linkstack.o linkstack_main.oHDRS:=linksude linkstack.h Makefile src linkstack.c linkstack_main.c2 directories, 4 files$makegcc -c ./sr
5、c/linkstack.c ./src/linkstack_main.c -O2 -I ./includegcc -O2 -I ./include linkstack.o linkstack_main.o -o linkstack$tree. include linkstack.h linkstack linkstack_main.o linkstack.o Makefile src linkstack.c linkstack_main.c2 directories, 7 files$make clean$tree. include linkstack.h Makefile src linkstack.c linkstack_main.c2 directories, 4 files