Введение в правила шаблонов
Правило шаблона содержит символ ‘%’ (ровно один) в целевом объекте; в противном случае, оно выглядит точно как обычное правило. Целевой объект является шаблоном для сопоставления имён файлов; ‘%’ соответствует любой непустой подстроке, в то время как другие символы соответствуют только самим себе.
Например, ‘%.c’ как шаблон соответствует любому имени файла, оканчивающемуся на ‘.c’. ‘s.%.c’ как шаблон соответствует любому имени файла, начинающемуся с ‘s.’, оканчивающемуся на ‘.c’ и имеющему длину не менее пяти символов. (Должен быть хотя бы один символ для сопоставления с ‘%’.) Подстрока, к которой соответствует ‘%’, называется основой.
‘%’ в предшествующем условии правила шаблона обозначает ту же самую основу, что и ‘%’ в целевом объекте. Для того, чтобы правило шаблона применилось, его целевой шаблон должен соответствовать рассматриваемому имени файла, и все его предшествующие условия (после подстановки шаблона) должны указывать на файлы, которые существуют или могут быть созданы. Эти файлы становятся предшествующими условиями целевого объекта.
Таким образом, правило вида
%.o : %.c ; recipe…
указывается, как создать файл n.o с другим файлом n.c в качестве предшествующего условия, при условии, что n.c существует или может быть создан.
Также могут быть предшествующие условия, которые не используют ‘%’; такое предшествующее условие относится к каждому файлу, создаваемому этим правилом шаблона. Эти неизменные предшествующие условия полезны иногда.
Правило шаблона может не иметь никаких предшествующих условий, содержащих ‘%’, или вообще никаких предшествующих условий. Такое правило эффективно является общим символом подстановки. Оно предоставляет способ создания любого файла, соответствующего шаблону целевого объекта. См. Последний шанс.
Несколько правил шаблонов могут соответствовать одному целевому объекту. В этом случае make будет выбирать правило с «наилучшим соответствием». См. Как соответствуют шаблоны.
Правила шаблонов могут иметь более одного целевого объекта; однако, каждый целевой объект должен содержать символ %. Несколько целевых шаблонов в правилах шаблонов всегда обрабатываются как сгруппированные целевые объекты (см. Несколько целевых объектов в правиле) независимо от того, используют ли они разделитель : или &:.
Есть одно исключение: если целевой шаблон устарел или не существует, и makefile не нужно его строить, то он не заставит другие целевые объекты считаться устаревшими. Обратите внимание, что это историческое исключение будет удалено в будущих версиях GNU make и на него нельзя полагаться. Если такая ситуация обнаружена make выведет предупреждение рецепт шаблона не обновил целевой объект peer; однако, make не может обнаружить все такие ситуации. Пожалуйста, убедитесь, что ваш рецепт обновляет все целевые шаблоны при его выполнении.
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/Pattern-Intro.html