Что такое точка с запятой в списке предварительных требований make-файла? - PullRequest
0 голосов
/ 21 сентября 2019

В одном из первых разделов руководства по сборке GNU, Раздел 3.7 , есть схема рецепта make-файла

immediate : immediate ; deferred
        deferred

, включающая точку с запятой в списке предварительных условий.Таким образом, действительный рецепт может быть

output.o : output.c header1.h header2.h; header3.h
        gcc output.c -o output.o

Какой смысл точки с запятой?Поскольку в вышеупомянутом разделе говорится о немедленном и отложенном расширении переменной, я предполагаю, что часть до точки с запятой раскрывается немедленно, а часть точки с запятой расширяется только после выполнения цели.Кто-нибудь может подтвердить?

Я нашел похожие вопросы по SO, но те, которые представляют особые случаи, и ни один из их принятых ответов, похоже, не понял.

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Как объяснено в 4.2 Синтаксис правила :

В общем случае правило выглядит так:

targets : prerequisites
        recipe
        …

или примерно так:

targets : prerequisites ; recipe
        recipe
        …

[...]

Строки рецепта начинаются с символа табуляции (или первого символа в значении переменной .RECIPEPREFIX; см. Специальные переменные ). Первая строка рецепта может появиться в строке после предварительных условий, с символом табуляции, или может появиться в той же строке, с точкой с запятой .В любом случае, эффект одинаков.

(выделение мое.)

Ваш пример эквивалентен

output.o : output.c header1.h header2.h
        header3.h
        gcc output.c -o output.o
1 голос
/ 21 сентября 2019

Точка с запятой просто позволяет записать первую строку рецепта в той же строке, что и список предпосылок.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...