Makefile VPATH && vpath 区别

0. 写在前面

编译C工程源码时,经常需要用到make命令。makefile文件中有个一容易被忽视的细节,即VPATH与vpath的区别,下面就来详细叙述这两者不同之处。

1. 让系统自动取寻找文件到依赖关系。

在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。此时在编译的时候,就需要指定文件的依赖关系。虽然可以在配制文件中指定,但是这不是最好的方法。因为一旦源代码改变了,就需要去更改配制文件。所以我们需要寻求一种更加简便的、更加灵活的方法。所以采取这种方法的话,相对来说可以简化make命令的编译工作。

2. 通过VPATH来定义查找的路径。

  在Linux操作系统中,有一个PATH环境变量。在make命令中,也有一个类似参数,叫做VPATH。这个变量就是用来指定make命令查找的路径。如果用户没有指定这个VPATH便量,则make命令只会在当前目录中去查找依赖文件和目标文件。但是如果用户定义了这个变量,则这个命令首先会在当前的目录中查找依赖文件和目标文件。如果在当前目录下找不到的话,则还会自动从VPATH变量定义的路径中去查找。
  在这个变量中,可以定义多个路径,路径之间都是利用英文状态下的冒号进行分割。定义VPATH变量时,即可以采用决定路径,也可以采用相对路径。

3. 通过vpath来定义查找的路径与匹配的模式。

如在某个目录中,除了源代码文件之外,还有不少的说明文档。如果在查找的时候,将所有的文件都判断一遍,那无疑会增加系统编译的时间。为此有时候,系统管理员不仅需要指定make命令查找的路径,而且还需要指定匹配的模式。如现在系统管理员希望make命令查找指定路径下的以.h结尾的文件。要实现这个需求,就需要用到另一个变量vpath

vpath根据所带参数的不同,这个命令主要用来完成三项工作:

(1) 什么参数都不带的情况下,指清除所有已经设置好了的文件搜索目录。注意其清除vpath命令所设置的搜索路径,而不影响VPATH变量所设置的查找路径。

(2) 带一个参数pattern,如vpath %.h。此时系统会清除符合模式的文件的搜索路径。

(3) 带两个参数,如vpath %.h ..(这个命令表示在上级目录中查找.h文件)。两个参数(匹配模式与文件的搜索路径)都带齐的话,就表示在指定的目录中按规定的模式进行查找。不过需要注意的是,这里一个模式最好对应一条语句。也就是说,在一个vpath语句中定义一个匹配模式。如果要定义多个匹配模式的话,此时最好的办法是连续使用vpath语句来定义,以指定不同的搜索策略。

有的系统中操作系统中,可以相同模式的情况下定义多个路径。如vpath %.h all、vpath %.h bll 、vpath %.h cll等等。此时后面对定义不会覆盖前面的定义。即三个语句是各自独立的,三个语句定义的变量都有效。

4. 使用这两个变量的注意事项。

  在使用这个两个变量时,需要注意在变量中不用指定当前目录。因为其默认情况下,会先从当前目录下查找。只有当前目录下找不到对应的文件时,才会从这两个变量指定的路径中去查找。在存在多个路径的时候,其查找的时候是按照路径先后定义的顺序来的。为此笔者要特别体系功能,PATH环境变量是把当前目录放在最后查找,而VPATH与vpath则是当前目录优先的。

  

【完】

你可能感兴趣的:(C语言,makefile,vpath,vpath)