Макро-правила GNU Makefile - PullRequest
1 голос
/ 15 марта 2012

В GNU Makfiles может быть начальный пробел перед определением макроса? и какой тип пробела разрешен (табуляции, переводы строки, пробел ...)

спасибо!

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Макрос может иметь любое количество пробелов перед именем макроса;он игнорируется.

В большинстве случаев пробелы могут состоять из пробелов и табуляции.

Существует одно исключение: если вы находитесь в «контексте правила», первый символ строки не можетбыть TAB (если это так, то строка считается частью рецепта правила, а не назначения макроса make).

Определение «контекста правила» удивительно для большинства людей:обратите внимание, что комментарии, пустые строки и даже разделы ifdef, которые не были приняты, не будут заканчиваться «контекстом правила»: строки, начинающиеся с TAB, после этого все еще считаются частью предыдущего правила.Только появление нового макрокоманды (или нового правила) завершит предыдущее правило.

Так, например:

foo: bar
        @cp $< $@

# now we have some comments

ifeq (true,false)
BAR := and an assignment that is not parsed
endif

# and some more comments

             FOO = and a macro starting with TAB + space

(при условии, что отступ здесь начинается с табуляции, а не пробелов)Последнее назначение «FOO» находится в контексте правила и будет считаться частью рецепта «foo», а не нового макроопределения.

В общем, лучше просто никогда, никогда не использоватьTAB в make-файле, если он не вводит строку рецепта.

0 голосов
/ 15 марта 2012

После долгих поисков:

Из GNU make:

"Имя переменной может быть любой последовательностью символов, не содержащей ':', '#', '=' иливедущий или конечный пробел. "

...