Spec-Zone.ru › GNU Make

Примеры правил шаблонов

Вот несколько примеров правил шаблонов, фактически предопределённых в make. Во-первых, правило, которое компилирует файлы ‘.c’ в файлы ‘.o’:

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

определяет правило, которое может создать любой файл x.o из файла x.c. Рецепт использует автоматические переменные ‘$@’ и ‘$<’ для подстановки имён целевого файла и исходного файла в каждом случае, когда правило применяется (см. Автоматические переменные).

Вот второе встроенное правило:

% :: RCS/%,v
        $(CO) $(COFLAGS) $<

определяет правило, которое может создать любой файл x из соответствующего файла x,v в подкаталоге RCS. Поскольку целевой файл — ‘%’, это правило будет применяться к любому файлу, при условии, что соответствующий файл-предшественник существует. Двойное двоеточие делает правило терминальным, что означает, что его предшественник не может быть промежуточным файлом (см. Правила шаблонов «Соответствие-любому»).

Это правило шаблона имеет два целевых файла:

%.tab.c %.tab.h: %.y
        bison -d $<

Это сообщает make о том, что рецепт ‘bison -d x.y’ создаст как x.tab.c, так и x.tab.h. Если файл foo зависит от файлов parse.tab.o и scan.o, а файл scan.o зависит от файла parse.tab.h, то при изменении файла parse.y рецепт ‘bison -d parse.y’ будет выполнен только один раз, и предшественники как parse.tab.o, так и scan.o будут удовлетворены. (Предполагается, что файл parse.tab.o будет перекомпилирован из parse.tab.c, а файл scan.o — из scan.c, в то время как foo связывается из parse.tab.o, scan.o и других его предшественников, и он будет счастливо выполняться дальше.)

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-Examples.html

Spec-Zone.ru

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