Директива vpath
Аналогично переменной VPATH, но более избирательной, является директива vpath (обратите внимание на строчные буквы), которая позволяет указать путь поиска для определенного класса имён файлов: тех, которые соответствуют определённому шаблону. Таким образом, вы можете указать определённые каталоги поиска для одного класса имён файлов и другие каталоги (или ни одного) для других имён файлов.
Существует три формы директивы vpath:
vpath pattern directories-
Укажите путь поиска directories для имён файлов, которые соответствуют pattern.
Путь поиска directories — это список каталогов, которые нужно проверить, разделённых двоеточиями (точками с запятой в MS-DOS и MS-Windows) или пробелами, как и путь поиска, используемый в переменной
VPATH. vpath pattern-
Очистить путь поиска, связанный с pattern.
vpath-
Очистить все пути поиска, ранее указанные с помощью директив
vpath.
Шаблон vpath — это строка, содержащая символ ‘%’. Строка должна совпадать с именем файла предшественника, который ищется; символ ‘%’ соответствует любой последовательности нуля или более символов (как в правилах шаблонов; см. Определение и переопределение правил шаблонов). Например, %.h соответствует файлам, которые заканчиваются на .h. (Если нет ‘%’, шаблон должен точно совпадать с предшественником, что не очень полезно.)
Символы ‘%’ в шаблоне директивы vpath могут быть заключены в кавычки с предшествующими обратными косыми чертами (‘\’). Обратные косые черты, которые в противном случае бы поставили в кавычки символы ‘%’, могут быть заключены в более обратных косых чертах. Обратные косые черты, которые ставят в кавычки символы ‘%’ или другие обратные косые черты, удаляются из шаблона перед сравнением с именами файлов. Обратные косые черты, которые не представляют опасности для цитирования символов ‘%’, остаются без изменений.
Если предшественник отсутствует в текущем каталоге, и если pattern в директиве vpath соответствует имени файла предшественника, то directories в этой директиве проверяются так же, как (и перед) каталогами в переменной VPATH.
Например,
vpath %.h ../headers
заставляет make искать любой предшественник, чьё имя заканчивается на .h, в каталоге ../headers, если файл не найден в текущем каталоге.
Если несколько шаблонов vpath соответствуют имени файла предшественника, то make обрабатывает каждую соответствующую директиву vpath по одной, проверяя все указанные в каждой директиве каталоги. make обрабатывает несколько директив vpath в порядке их появления в файле make; несколько директив с одним и тем же шаблоном независимы друг от друга.
Таким образом,
vpath %.c foo vpath % blish vpath %.c bar
будет искать файл, оканчивающийся на ‘.c’, в foo, затем в blish, затем в bar, в то время как
vpath %.c foo:bar vpath % blish
будет искать файл, оканчивающийся на ‘.c’, в foo, затем в bar, затем в 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, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Selective-Search.html