В GNU У файлов Macfiles есть передние определения пробелов перед определением макроса? и какие типы пробелов разрешены (вкладки, новые строки, пробел ...)Правила макросов GNU Makefile
спасибо!
В GNU У файлов Macfiles есть передние определения пробелов перед определением макроса? и какие типы пробелов разрешены (вкладки, новые строки, пробел ...)Правила макросов GNU Makefile
спасибо!
После долгих поисков:
От GNU сделать:
«Имя переменной может быть любая последовательность символов, не содержащая„:“,„#“,„=“, или передней или задней пробельные «.
Макрос может иметь любое количество пробелов перед именем макроса; он игнорируется.
Пробелы могут состоять из пространств и TAB, в большинстве случаев.
Есть одно исключение: если вы находитесь в «контексте правила», первый символ строки не может быть TAB (если это так, то строка считается частью рецепта правила, а не назначение макроса make).
Определение «контекст правила» удивительно для большинства людей: обратите внимание, что комментарии, пустые строки и даже те секции ifdef, которые не выполняются, не заканчиваются «контекстом правила»: строки, начинающиеся с TAB, после этого все еще считается частью предыдущего правила. Только появление нового назначения макроса (или нового правила) закончит предыдущее правило.
Так, например:
foo: bar
@cp $< [email protected]
# 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
(при условии, отступы здесь начинается с TAB не пробелами) Последние назначения «FOO» в контексте правил и будет считаться частью рецепта для «Foo» , а не новое назначение макроса.
В общем, лучше просто никогда не использовать ТАБ в make-файле, если только он не вводит линию рецептов.
Фактически, имя переменной может содержать любые символы, если у вас нет унаследованных пробелов в присваивании (т. Е. 'Name: = text with spaces', а затем' $ {name}: = text' _will_ work, и '$ {text with spaces}' будет соответствующим образом расширяться). – bobbogo