工程项目中不可能吧全部源文件放到同一个文件夹里
为了项目管理,会根据功能或者代码架构,吧源文件放到不同的目录下.
项目中的makefile必须能够正确定位源文件和依赖文件,最终编译产生可执行程序.
VPATH变量的值用于指示make如何查找文件
不同文件夹可作为VPATH的值同时出现
文件夹的名字之间需要使用分隔符进行区分
例如:VPATH := inc src
例如:VPATH := inc;src
例如:VPATH := inc:src
当前文件夹找不到需要的文件时,VPATH会被使用
make会在VPATH指定的文件夹中依次搜索文件
当多个文件夹存在同名文件时,选择第一次搜索到的文件
VPATH只能决定make的搜索路径,无法决定命令的搜索路径
对于特定的编译命令(gcc),需要独立指定编译搜索路径
gcc -I include-path
当inc文件夹中意外出现源文件时,那么可能产生编译错误
替换方案:vpath关键字(小写)
为不同类型的文件制定不同的搜索路径
语法:在directory中搜索符合pattern的规则文集那
vpath pattern directory
vpath %.h inc
vpath %.c src
vpth %.h (取消搜索.h文件)
vpath(取消全部)
问题一:当VPATH和vpath同时出现,make会如何处理?
优先选择vpath,在vpath搜索不到时再选择VPATH
有可能使用隐式规则
问题二:当有两个vpath同时指定两个文件夹时,make如何处理?
自上而下优先选择
可能使用隐式规则
问题三:通过VPATH指定搜索路径后,make如何决定目标文件的最终位置?
make对路径搜索其实很弱,经常出现一些错误
当app.out完全不存在,make默认在当前文件夹创建
当app.out存在与src,且依赖文件被更新,但app.out不更新
GPATH:=src
当app.out完全不存在,make默认在当前文件夹创建
当app.out存在与src,且依赖文件被更新,重新执行命令,生成app.out存在src