Программирование PC Makefile: синтаксис команд цели (recipe syntax) Sat, December 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Makefile: синтаксис команд цели (recipe syntax) Печать
Добавил(а) microsin   

Файлы Makefile обладают необычным свойством: в одном файле фактически и действует два совершенно разных синтаксиса. По большей части это синтаксис make (см. "3 Writing Makefiles" [1]). Однако команды цели (recipe) предназначены для интерпретации шеллом, и они пишутся в синтаксисе скриптов shell (bash или sh). Утилита make не пытается парсить синтаксис shell: она выполняет только очень специфические трансляции содержимого recipe перед передачей этого в shell.

Важное правило: каждая строка recipe обязательно должна начинаться с символа табуляции (либо значение первого символа должно совпадать со значением переменной .RECIPEPREFIX; см. "6.14 Other Special Variables" [1]), за исключением того, что первая строка recipe может быть присоединена к строке цели и и предварительных условий (target-and-prerequisites) с точкой с запятой между ними. Любая строка в makefile, которая начинается с табуляции и появляется в "контексте правила" (то есть после того, как правило было запущено до другого определения правила или переменной), будет считаться частью recipe для этого правила. Пустые строки и строки только комментариев могут появиться среди строк recipe; они игнорируются.

Некоторые последствия этих правил включают в себя:

• Пустая строка, которая начинается на символ табуляции, на самом деле не пустая: это empty recipe (см. "5.9 Using Empty Recipes" [1]).
• Комментарий в recipe это не комментарий make; он передается в shell как есть. Будет ли эта строка обработана как комментарий или как-то иначе зависит от вашего shell.
• Определение переменной в "контексте правила", которое идет за символом табуляции в первом символе строки, будет считаться частью recipe, но не определением переменной make, и это определение будет передано в shell.
• Условные выражения (ifdef, ifeq и т. п., см. "7.2 Syntax of Conditionals" [1]) в "контексте правила", которые идут за символом табуляции в первой позиции строки, считаются частью recipe, и будут переданы в shell.

См. также:

• 5.1.1 Splitting Recipe Lines [1].
• 5.1.2 Using Variables in Recipes [1].

[Ссылки]

1. GNU make.
2Магия makefile на простых примерах.
3Makefile: синтаксис команд цели (recipe syntax).

 

Добавить комментарий


Защитный код
Обновить

Top of Page