Spec-Zone.ru › GNU Make

Функция wildcard

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

$(wildcard pattern…)

Эта строка, используемая где угодно в файле проекта make, заменяется на список имён существующих файлов, соответствующих одному из заданных шаблонов имён файлов, разделённых пробелами. Если ни один существующий файл не соответствует шаблону, то этот шаблон опускается из вывода функции wildcard. Обратите внимание, что это отличается от того, как ведут себя несоответствующие шаблоны в правилах, где они используются дословно, а не игнорируются (см. Ошибки при использовании шаблонов).

Как и при подстановке шаблонов в правилах, результаты работы функции wildcard сортируются. Но опять же, каждое отдельное выражение сортируется отдельно, поэтому «$(wildcard *.c *.h)» будет расширено до всех файлов, соответствующих «.c», отсортированных, за которыми следуют все файлы, соответствующие «.h», отсортированные.

Одно из применений функции wildcard — получение списка всех файлов исходного кода C в каталоге, например:

$(wildcard *.c)

Мы можем изменить список файлов исходного кода C на список файлов объектного кода, заменив суффикс «.c» на «.o» в результате, например:

$(patsubst %.c,%.o,$(wildcard *.c))

(Здесь мы использовали другую функцию, patsubst. См. Функции для подстановки и анализа строк.)

Таким образом, файл проекта make для компиляции всех файлов исходного кода C в каталоге и последующей их компоновки может быть записан следующим образом:

objects := $(patsubst %.c,%.o,$(wildcard *.c))

foo : $(objects)
        cc -o foo $(objects)

(Это использует неявное правило для компиляции программ C, поэтому нет необходимости писать явные правила для компиляции файлов. См. Два типа переменных для объяснения «:=», что является вариантом «=».)

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/Wildcard-Function.html

Spec-Zone.ru

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