Spec-Zone.ru › GNU Make

Как интерпретируются файлы make

GNU make интерпретирует файлы make построчно. Интерпретация происходит в соответствии со следующими шагами:

  1. Прочитать полную логическую строку, включая строки с обратными слешами (см. Разделение длинных строк).
  2. Удалить комментарии (см. Что содержат файлы make).
  3. Если строка начинается с символа префикса рецепта и мы находимся в контексте правила, добавить строку в текущий рецепт и прочитать следующую строку (см. Синтаксис рецепта).
  4. Развернуть элементы строки, которые появляются в контексте немедленного развертывания (см. Как make читает файл make).
  5. Просканировать строку на наличие разделителя, такого как ‘:’ или ‘=’, чтобы определить, является ли строка назначением макроса или правилом (см. Синтаксис рецепта).
  6. Внутренне интерпретировать полученное действие и прочитать следующую строку.

Важное следствие этого заключается в том, что макрос может развернуться в целое правило, если оно имеет одну строку. Это сработает:

myrule = target : ; echo built

$(myrule)

Однако это не сработает, потому что make не повторно разделяет строки после их развертывания:

define myrule
target:
        echo built
endef

$(myrule)

Вышеприведённый файл make приводит к определению цели ‘target’ с предварительными условиями ‘echo’ и ‘built’, как если бы файл make содержал target: echo built, а не правило с рецептом. Новые строки, присутствующие в строке после завершения развертывания, игнорируются как обычное пробельное пространство.

Для правильного развертывания многострочного макроса необходимо использовать функцию eval: это заставляет парсер make работать с результатами развернутого макроса (см. Функция Eval).

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/Parsing-Makefiles.html

Spec-Zone.ru

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