Spec-Zone.ru › GNU Make

Особенности GNU make

Ниже приведён сводный список особенностей GNU make, для сравнения с другими версиями make. В качестве эталона мы рассматриваем особенности make в системах 4.2 BSD. Если вы заботитесь о написании переносимых make-файлов, вам не следует использовать перечисленные здесь функции make, а также те, что в Отсутствующие.

Многие особенности заимствованы из версии make в System V.

  • Переменная VPATH и её особое значение. См. Поиск каталогов для предварительных условий. Эта функция существует в System V make, но не документирована. Она документирована в 4.3 BSD make (где говорится, что она имитирует функцию VPATH System V).
  • Включённые make-файлы. См. Включение других make-файлов. Возможность включения нескольких файлов с помощью одной директивы — это расширение GNU.
  • Переменные считываются из среды и передаются через неё. См. Переменные из среды.
  • Параметры, передаваемые через переменную MAKEFLAGS рекурсивным вызовам make. См. Передача параметров подзадаче make.
  • Автоматическая переменная $% устанавливается в имя элемента в ссылке на архив. См. Автоматические переменные.
  • Автоматические переменные $@, $*, $<, $%, и $? имеют аналогичные формы, такие как $(@F) и $(@D). Мы обобщили это на $^, как очевидное расширение. См. Автоматические переменные.
  • Ссылки на переменные подстановки. См. Основы ссылок на переменные.
  • Командные параметры ‘-b’ и ‘-m’ принимаются и игнорируются. В System V make, эти параметры фактически что-то делают.
  • Выполнение рекурсивных команд для запуска make через переменную MAKE, даже если указан ‘-n’, ‘-q’ или ‘-t’. См. Рекурсивное использование make.
  • Поддержка суффикса ‘.a’ в правилах суффикса. См. Правила суффикса архивов. Эта функция устарела в GNU make, так как общая функция цепочки правил (см. Цепочки неявных правил) позволяет использовать одно правило шаблона для установки элементов в архив (см. Обновление архивов).
  • Порядок строк и комбинаций обратного слеша/перевода строки в рецептах сохраняется при печати рецептов, так что они отображаются так, как они есть в make-файле, за исключением удаления начальных пробелов.

Следующие функции были вдохновлены различными другими версиями make. В некоторых случаях неясно, какие версии вдохновили какие другие.

  • Правила шаблонов с использованием ‘%’. Это реализовано в нескольких версиях make. Мы не уверены, кто придумал это первым, но оно распространилось. См. Определение и переопределение правил шаблонов.
  • Цепочки правил и неявные промежуточные файлы. Это реализовано Stu Feldman в его версии make для исследовательской Unix AT&T восьмого издания, а затем Andrew Hume из AT&T Bell Labs в его программе mk (где он называет это «транзитивным замыканием»). Мы не совсем уверены, взяли ли мы это у них или придумали сами одновременно. См. Цепочки неявных правил.
  • Автоматическая переменная $^, содержащая список всех предварительных условий текущей цели. Мы не изобретали это, но не знаем, кто это сделал. См. Автоматические переменные. Автоматическая переменная $+ является простым расширением $^.
  • Флаг «что если» (‘-W’ в GNU make) был (насколько нам известно) изобретён Andrew Hume в mk См. Вместо выполнения рецептов.
  • Понятие выполнения нескольких задач одновременно (параллелизм) существует во многих вариантах make и подобных программ, хотя не в реализациях System V или BSD. См. Выполнение рецептов.
  • Несколько инструментов построения, поддерживающих параллелизм, также поддерживают сбор выходных данных и вывод в виде одного блока. См. Выходные данные во время параллельного выполнения.
  • Изменённые ссылки на переменные с использованием подстановки шаблонов происходят от SunOS 4. См. Основы ссылок на переменные. Эта функциональность предоставлялась в GNU make функцией patsubst до реализации альтернативного синтаксиса для совместимости с SunOS 4. Не совсем ясно, кто вдохновил кого, так как в GNU make была функция patsubst до выпуска SunOS 4.
  • Особое значение символов ‘+’ перед строками рецепта (см. Вместо выполнения рецептов) предписано стандартом IEEE Standard 1003.2-1992 (POSIX.2).
  • Синтаксис ‘+=’ для добавления к значению переменной происходит от SunOS 4 make. См. Добавление текста к переменным.
  • Синтаксис ‘archive(mem1 mem2…)’ для перечисления нескольких членов в одном файле архива происходит от SunOS 4 make. См. Элементы архива.
  • Директива -include для включения make-файлов без ошибки для несуществующего файла происходит от SunOS 4 make. (Но обратите внимание, что SunOS 4 make не позволяет указывать несколько make-файлов в одной директиве -include.) Такая же функция встречается под именем sinclude в SGI make и, возможно, в других.
  • Оператор присваивания != оболочки существует во многих BSD make и намеренно реализован здесь так, чтобы вести себя идентично этим реализациям.
  • Различные инструменты управления сборкой реализованы с помощью языков сценариев, таких как Perl или Python, и, таким образом, предоставляют встроенный язык сценариев, аналогичный интеграции GNU Guile в GNU make.

Остальные функции — новые изобретения GNU make:

  • Используйте опцию ‘-v’ или ‘--version’ для вывода информации о версии и авторских правах.
  • Используйте опцию ‘-h’ или ‘--help’ для вывода сводки опций make.
  • Просто расширенные переменные. См. Два типа переменных.
  • Автоматически передавать присваивания переменных из командной строки через переменную MAKE рекурсивным вызовам make . См. Рекурсивное использование make.
  • Используйте командную опцию ‘-C’ или ‘--directory’ для изменения каталога. См. Сводка опций.
  • Определять переменные дословно с помощью define . См. Определение многострочных переменных.
  • Объявлять фиктивные цели со специальной целью .PHONY .

    Andrew Hume из AT&T Bell Labs реализовал аналогичную функцию с другим синтаксисом в своей программе mk . Похоже, это случай параллельного открытия. См. Фиктивные цели.

  • Изменять текст, вызывая функции. См. Функции для преобразования текста.
  • Используйте опцию ‘-o’ или ‘--old-file’ для имитации того, что время изменения файла старое. См. Избегание перекомпиляции некоторых файлов.
  • Условное выполнение.

    Эта функция была реализована многократно в различных версиях make; она, похоже, является естественным расширением, полученным от функций препроцессора C и аналогичных языков макросов, и не является революционной концепцией. См. Условные части make-файлов.

  • Укажите путь поиска для включённых make-файлов. См. Включение других make-файлов.
  • Укажите дополнительные make-файлы для чтения с помощью переменной среды. См. Переменная MAKEFILES.
  • Удалить ведущие последовательности ‘./’ из имён файлов, так что ./file и file считаются одним и тем же файлом.
  • Используйте специальный метод поиска для предварительных условий библиотек, записанных в виде ‘-lname’. См. Поиск каталогов для библиотек линковки.
  • Разрешить суффиксам в правилах суффикса (см. Старые правила суффикса) содержать любые символы. В других версиях make, они должны начинаться с ‘.’ и не содержать символов ‘/’.
  • Отслеживать текущий уровень рекурсии make с помощью переменной MAKELEVEL . См. Рекурсивное использование make.
  • Предоставлять все цели, заданные в командной строке, в переменной MAKECMDGOALS . См. Аргументы для задания целей.
  • Указывать статические правила шаблонов. См. Статические правила шаблонов.
  • Обеспечить выборочное vpath поиск. См. Поиск каталогов для предварительных условий.
  • Предоставить вычисленные ссылки на переменные. См. Основы ссылок на переменные.
  • Обновлять make-файлы. См. Как пересоздаются make-файлы. В System V make существует очень ограниченная форма этой функциональности, при которой будут извлекаться файлы SCCS для make-файлов.
  • Различные новые встроенные неявные правила. См. Каталог встроенных правил.
  • Загружать динамические объекты, которые могут изменять поведение 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/Features.html

Spec-Zone.ru

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