Макрос может иметь любое количество пробелов перед именем макроса;он игнорируется.
В большинстве случаев пробелы могут состоять из пробелов и табуляции.
Существует одно исключение: если вы находитесь в «контексте правила», первый символ строки не можетбыть 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-файле, если он не вводит строку рецепта.