前言
摘录于 《跟我一起写makefile》
本文主要开始介绍makefile的文件遍寻。
文件遍寻
在一些大的工程中, 有大量的源文件, 我们通常的做法是把这许多的源文件分类, 并存放在不同的目录中。所以, 当 make 需要去找寻文件的依赖关系时, 你可以在文件前加上路径, 但最好的方法是把一个路径告诉 make, 让 make 在自动去找。
VPATH
Makefile 文件中的特殊变量"VPATH"可以指定源文件的目录所在。
如果没有指明这个变量, make 只会在当前的目录中去找寻依赖文件和目标文件。
如果定义了这个变量, 那么, make就会在当 当前目录找不到的情况下, 到所指定的目录中去找寻文件了。
1 | VPATH = src:../headers |
上面的的定义指定两个目录, "src"和"…/headers",
make 会按照这个顺序进行搜索。目录由"冒号"分隔。(当然, 当前目录永远是最高优先搜索的地方)
vpath
另一个设置文件搜索路径的方法是使用 make 的"vpath"关键字(注意, 它是全小写的), 这不是变量, 这是一个 make 的关键字, 这和上面提到的那个 VPATH 变量很类似, 但是它更为灵活。
它可以指定不同的文件在不同的搜索目录中。
使用方法
使用方法有三种:
vpath <pattern> <directories>
为符合模式的文件指定搜索目录 vpath <pattern>
清除符合模式的文件的搜索目录。 vpath
清除所有已被设置好了的文件搜索目录。
vapth 使用方法中的"%"
字符。"%"
的意思是匹配零或若干字符。
例如, "%.h"表示所有以".h"结尾的文件。
例如:
1 | vpath %.h ../headers |
该语句表示, 要求 make 在"…/headers"目录下搜索所有以".h"结尾的文件。(如果某文件在当前目录没有找到的话)
我们可以连续地使用 vpath 语句, 以指定不同搜索策略。
如果连续的 vpath 语句中出现了相同的
1 | vpath %.c foo |
其表示".c"结尾的文件, 先在"foo"目录, 然后是"blish", 最后是"bar"目录。
1 | vpath %.c foo:bar |
而上面的语句则表示".c"结尾的文件, 先在"foo"目录, 然后是"bar"目录, 最后才是"blish"目录