2012-03-15 6 views

ответ

0

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

От GNU сделать:

«Имя переменной может быть любая последовательность символов, не содержащая„:“,„#“,„=“, или передней или задней пробельные «.

+0

Фактически, имя переменной может содержать любые символы, если у вас нет унаследованных пробелов в присваивании (т. Е. 'Name: = text with spaces', а затем' $ {name}: = text' _will_ work, и '$ {text with spaces}' будет соответствующим образом расширяться). – bobbogo

5

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

Пробелы могут состоять из пространств и 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-файле, если только он не вводит линию рецептов.

Смежные вопросы