Spec-Zone.ru › GNU Make

Включение других файлов Makefile

Директива include говорит make приостановить чтение текущего файла Makefile и прочитать один или несколько других файлов Makefile, прежде чем продолжить. Директива представляет собой строку в файле Makefile, которая выглядит так:

include filenames…

filenames могут содержать шаблоны имён файлов оболочки. Если filenames пусто, ничего не включается и не выводится никаких сообщений об ошибках.

Дополнительные пробелы допускаются и игнорируются в начале строки, но первый символ не должен быть табуляцией (или значением .RECIPEPREFIX). Если строка начинается с табуляции, она будет рассматриваться как строка рецепта. Необходимы пробелы между include и именами файлов, а также между именами файлов; дополнительные пробелы игнорируются там и в конце директивы. Допускается комментарий, начинающийся с «#», в конце строки. Если имена файлов содержат какие-либо ссылки на переменные или функции, они расширяются. См. Использование переменных.

Например, если у вас есть три файла .mk, a.mk, b.mk и c.mk, и $(bar) расширяется до bish bash, то следующее выражение

include foo *.mk $(bar)

эквивалентно

include foo a.mk b.mk c.mk bish bash

Когда make обрабатывает директиву include, он приостанавливает чтение содержащего файла Makefile и читает каждый из перечисленных файлов по очереди. После завершения make возобновляет чтение файла Makefile, в котором появляется директива.

Один из случаев использования директив include — когда несколько программ, управляемых отдельными файлами Makefile в различных каталогах, должны использовать общий набор определений переменных (см. Настройка переменных) или правил шаблонов (см. Определение и переопределение правил шаблонов).

Другой случай — когда вы хотите автоматически генерировать зависимости из исходных файлов; зависимости можно поместить в файл, который включается в основной файл Makefile. Эта практика, как правило, чище, чем приписывание зависимостей в конец основного файла Makefile, как это традиционно делалось с другими версиями make. См. Автоматические зависимости.

Если указанное имя не начинается с косой черты и файл не найден в текущем каталоге, выполняется поиск в нескольких других каталогах. Сначала проверяются каталоги, которые вы указали с помощью опций «-I» или «--include-dir» (см. Обзор опций). Затем проверяются следующие каталоги (если они существуют) в этом порядке: prefix/include (обычно /usr/local/include 1) /usr/gnu/include, /usr/local/include, /usr/include.

Переменная .INCLUDE_DIRS будет содержать текущий список каталогов, в которых утилита make будет искать включаемые файлы. См. Другие специальные переменные.

Вы можете избежать поиска в этих каталогах по умолчанию, добавив в командную строку опцию -I со специальным значением - (например, -I-). Это заставит make забыть все уже установленные каталоги включения, включая каталоги по умолчанию.

Если включённый файл Makefile не может быть найден ни в одном из этих каталогов, это не является немедленной ошибкой; обработка файла Makefile, содержащего директиву include, продолжается. После завершения чтения файлов Makefile make попытается пересобрать все файлы, которые устарели или не существуют. См. Как пересобираются файлы Makefile. Только после того, как он не смог найти правило для пересобирания файла Makefile или нашёл правило, но рецепт завершился неудачей, make диагностирует отсутствие файла Makefile как ошибку.

Если вы хотите, чтобы make просто игнорировал Makefile, который не существует или не может быть пересобран, без сообщения об ошибке, используйте директиву -include вместо include, как показано ниже:

-include filenames…

Это действует как include во всех отношениях, за исключением того, что нет ошибок (даже предупреждений), если какой-либо из filenames (или какие-либо зависимости каких-либо из filenames) не существуют или не могут быть пересобраны.

Для совместимости с некоторыми другими реализациями make sinclude — это другое имя для -include.

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/Include.html

Spec-Zone.ru

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