(make.info)Selective Search

Next: Commands/Search Prev: General Search Up: Directory Search

The `vpath' Directive

   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:

     Specify the search path DIRECTORIES for file names that match

     The search path, DIRECTORIES, is a list of directories to be
     searched, separated by colons or blanks, just like the search path
     used in the `VPATH' variable.

`vpath PATTERN'
     Clear out the search path associated with PATTERN.

     Clear all search paths previously specified with `vpath'

   A `vpath' pattern is a string containing a `%' character.  The
string must match the file name of a dependency that is being searched
for, the `%' character matching any sequence of zero or more characters
(as in pattern rules; *note Defining and Redefining Pattern Rules:
Pattern Rules.).  For example, `%.h' matches files that end in `.h'.
(If there is no `%', the pattern must match the dependency 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 dependency fails to exist in the current directory, if the
PATTERN in a `vpath' directive matches the name of the dependency 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 dependency whose name ends in `.h' in the
directory `../headers' if the file is not found in the current

   If several `vpath' patterns match the dependency 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.


     vpath %.c foo
     vpath %   blish
     vpath %.c bar

will look for a file ending in `.c' in `foo', then `blish', then `bar',

     vpath %.c foo:bar
     vpath %   blish

will look for a file ending in `.c' in `foo', then `bar', then `blish'.

automatically generated by info2www