Makefile学习(2)
1.makefile文件的内容主要包含以下几个内容:
?
关于“隐晦规则”后续会进行学习说明。
注:makefile中的命令必须以Tab开始。
?
2.文件引用
语法:
include <filename>
注:
filename中可以包含路径和通配符include前面可以有一些空字符,但是不可以以Tab键开始示例:
有以下几个文件:a.mk?? b.mk??? c.mk?? foo.make
还有一个变量$(bar),其包含了e.mk?? f.mk
那么:?? include foo.make? *.mk? $(bar)
等价于?? include foo.make? a.mk? b.mk? c.mk? e.mk? f.mk
?
3.通配符的使用
make支持三种通配符:*?? ??? [...]
*:匹配0或多个字符?:匹配任意单一字符[...]:匹配...中的任意单一字符
?
4.文件搜索
由于在一些大的工程中,源文件数量很多,所以当make需要找寻文件的依赖关系时,就需要知道文件的路径。
以下是设置路径的方法:
makefile文件中的特殊变量“VPATH”
make的关键字“vpath”(全部小写)
(1)VPATH:
当makefile中指定了这个变量,make就会在当前目录找不到的情况下到指定的目录文件中去找寻;否之,make只会在当前的目录文件中去寻找依赖文件和目标文件。
?
例如:VPATH=src:../headers
?
说明:
目录之间由":"分隔,所以上面的定义指定了两个目录:src?? ../headers当前目录永远是最高级优先搜索的地方
(2)关键字:vpath
和上面的VPATH变量很类似,但是更为灵活。
使用方法有以下三种:
vpath <pattern> <directories>
为符合模式<pattern>的文件指定搜索目录<directories>
vpath <pattern>
清除符合模式<pattern>的文件的搜索目录
vpath
清除所有已经被设置好了的文件搜索目录
?
说明:
vpath使用方法中的<pattern>需要包含“%”字符,意思是匹配零个或者若干个字符
eg? “%.h”? :所有以“.h”结尾的文件
<pattern>指定了要搜索的文件集,<directories>则指定了文件的搜索目录
eg vpath %.h ../headers :表示make在 ./headers目录下搜索所有以 .h 结尾的文件(如果在当前目录下没有找到的话)
可以连续的使用vpath,以指定不同的策略,make会按照语句顺序执行
eg? vpath? %.c? foo
?????? vpath? % blish
?????? vpath? %.c bar