Значения переменных, специфичных для шаблона
В дополнение к значениям переменных, специфичным для целевых платформ (см. Значения переменных, специфичные для целевых платформ), GNU make поддерживает значения переменных, специфичных для шаблонов. В этом формате переменная определяется для любой целевой платформы, которая соответствует заданному шаблону.
Установите значение переменной, специфичное для шаблона, следующим образом:
pattern … : variable-assignment
где шаблон — это шаблон с процентами. Как и в случае со значениями переменных, специфичных для целевых платформ, несколько значений шаблон создают значение переменной, специфичное для каждого шаблона индивидуально. присваивание-переменной может быть любым допустимым видом присваивания. Любое значение переменной командной строки будет иметь приоритет, если не указано override.
Например:
%.o : CFLAGS = -O
присвоит CFLAGS значение ‘-O’ для всех целевых платформ, соответствующих шаблону %.o.
Если целевая платформа соответствует более чем одному шаблону, переменные, специфичные для шаблона, с более длинными префиксами интерпретируются в первую очередь. Это означает, что более конкретные переменные имеют приоритет над более общими, например:
%.o: %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
lib/%.o: CFLAGS := -fPIC -g
%.o: CFLAGS := -g
all: foo.o lib/bar.o
В этом примере первое определение переменной CFLAGS будет использовано для обновления lib/bar.o, даже если второе также относится к этой целевой платформе. Переменные, специфичные для шаблонов, которые приводят к одинаковой длине префикса, рассматриваются в том порядке, в котором они были определены в файле 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_002dspecific.html