Как интерпретируются файлы make
GNU make интерпретирует файлы make построчно. Интерпретация происходит в соответствии со следующими шагами:
- Прочитать полную логическую строку, включая строки с обратными слешами (см. Разделение длинных строк).
- Удалить комментарии (см. Что содержат файлы make).
- Если строка начинается с символа префикса рецепта и мы находимся в контексте правила, добавить строку в текущий рецепт и прочитать следующую строку (см. Синтаксис рецепта).
- Развернуть элементы строки, которые появляются в контексте немедленного развертывания (см. Как
makeчитает файл make). - Просканировать строку на наличие разделителя, такого как ‘:’ или ‘=’, чтобы определить, является ли строка назначением макроса или правилом (см. Синтаксис рецепта).
- Внутренне интерпретировать полученное действие и прочитать следующую строку.
Важное следствие этого заключается в том, что макрос может развернуться в целое правило, если оно имеет одну строку. Это сработает:
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