Similar to the VPATH
variable, but more selective, is the vpath
directive (note lower case), which allows you to specify a search path for a particular class of file names: those that match a particular pattern. Thus you can supply certain search directories for one class of file names and other directories (or none) for other file names.
There are three forms of the vpath
directive:
vpath pattern directories
Specify the search path directories for file names that match pattern.
The search path, directories, is a list of directories to be searched, separated by colons (semi-colons on MS-DOS and MS-Windows) or blanks, just like the search path used in the VPATH
variable.
vpath pattern
Clear out the search path associated with pattern.
vpath
Clear all search paths previously specified with vpath
directives.
A vpath
pattern is a string containing a ‘%’ character. The string must match the file name of a prerequisite that is being searched for, the ‘%’ character matching any sequence of zero or more characters (as in pattern rules; see Defining and Redefining Pattern Rules). For example, %.h
matches files that end in .h
. (If there is no ‘%’, the pattern must match the prerequisite exactly, which is not useful very often.)
‘%’ characters in a vpath
directive’s pattern can be quoted with preceding backslashes (‘\’). Backslashes that would otherwise quote ‘%’ characters can be quoted with more backslashes. Backslashes that quote ‘%’ characters or other backslashes are removed from the pattern before it is compared to file names. Backslashes that are not in danger of quoting ‘%’ characters go unmolested.
When a prerequisite fails to exist in the current directory, if the pattern in a vpath
directive matches the name of the prerequisite file, then the directories in that directive are searched just like (and before) the directories in the VPATH
variable.
For example,
vpath %.h ../headers
tells make
to look for any prerequisite whose name ends in .h in the directory ../headers if the file is not found in the current directory.
If several vpath
patterns match the prerequisite file’s name, then make
processes each matching vpath
directive one by one, searching all the directories mentioned in each directive. make
handles multiple vpath
directives in the order in which they appear in the makefile; multiple directives with the same pattern are independent of each other.
Thus,
vpath %.c foo vpath % blish vpath %.c bar
will look for a file ending in ‘.c’ in foo, then blish, then bar, while
vpath %.c foo:bar vpath % blish
will look for a file ending in ‘.c’ in foo, then bar, then blish.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Selective-Search.html