Spec-Zone.ru › GNU Make

Правила суффиксов старого образца

Правила суффиксов — это устаревший способ определения неявных правил для make. Правила суффиксов устарели, так как правила шаблонов более общие и ясные. Они поддерживаются в GNU make для совместимости со старыми makeфайлами. Они бывают двух типов: двойные суффиксы и одиночные суффиксы.

Правило с двойными суффиксами определяется парой суффиксов: суффиксом целевого файла и суффиксом исходного файла. Оно соответствует любому файлу, имя которого заканчивается целевым суффиксом. Соответствующий неявный предшественник создаётся заменой целевого суффикса на суффикс исходного файла в имени файла. Правило с двумя суффиксами «.c.o» (целевой и исходный суффиксы — «.o» и «.c») эквивалентно правилу шаблона «%.o : %.c».

Правило с одиночным суффиксом определяется одним суффиксом, который является суффиксом исходного файла. Оно соответствует любому имени файла, а соответствующее имя неявного предшественника создаётся добавлением суффикса исходного файла. Правило с одиночным суффиксом, у которого суффикс исходного файла — «.c», эквивалентно правилу шаблона «% : %.c».

Определение правил суффиксов распознаётся путём сравнения целевого файла каждого правила с определённым списком известных суффиксов. Когда make видит правило, целевой файл которого является известным суффиксом, это правило считается правилом с одиночным суффиксом. Когда make видит правило, целевой файл которого состоит из двух известных суффиксов, соединённых вместе, это правило рассматривается как правило с двойным суффиксом.

Например, «.c» и «.o» находятся в стандартном списке известных суффиксов. Поэтому, если вы определяете правило, целевой файл которого — «.c.o», make принимает его за правило с двойным суффиксом, у которого суффикс исходного файла — «.c», а суффикс целевого файла — «.o». Вот как определяется правило для компиляции файла исходного кода C старым способом:

.c.o:
        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

Правила суффиксов не могут иметь собственных предшественников. Если они их имеют, они рассматриваются как обычные файлы с необычными именами, а не как правила суффиксов. Таким образом, правило:

.c.o: foo.h
        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

указывает, как создать файл .c.o из файла-предшественника foo.h, и не похоже ни на какое правило шаблона:

%.o: %.c foo.h
        $(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

которое показывает, как создать файлы «.o» из файлов «.c», и заставляет все файлы «.o», созданные по этому шаблону, также зависеть от foo.h.

Правила суффиксов без рецепта также бессмысленны. Они не удаляют предыдущие правила, как это делают правила шаблонов без рецепта (см. Отмена неявных правил). Они просто добавляют суффикс или пару соединённых суффиксов в качестве цели в базу данных.

Известные суффиксы — это просто имена предшественников специальной цели .SUFFIXES. Вы можете добавить свои собственные суффиксы, написав правило для .SUFFIXES, которое добавляет больше предшественников, как в этом примере:

.SUFFIXES: .hack .win

который добавляет «.hack» и «.win» в конец списка суффиксов.

Если вы хотите удалить стандартные известные суффиксы вместо добавления к ним, напишите правило для .SUFFIXES без предшественников. По особому разрешению это удаляет все существующие предшественники .SUFFIXES. Затем вы можете написать другое правило, чтобы добавить необходимые суффиксы. Например:

.SUFFIXES:            # Delete the default suffixes
.SUFFIXES: .c .o .h   # Define our suffix list

Флаг «-r» или «--no-builtin-rules» устанавливает стандартный список суффиксов в пустое значение.

Переменная SUFFIXES определена как стандартный список суффиксов до того, как make прочитает любые makeфайлы. Вы можете изменить список суффиксов с помощью правила для специальной цели .SUFFIXES, но это не повлияет на эту переменную.

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/Suffix-Rules.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API