Cod*_*lus 1 whitespace gnu makefile space
在GNU中,Makfiles可以在宏定义之前有前导空格吗?以及允许的空格类型(制表符,换行符,空格......)
谢谢!
宏可以在宏的名称之前有任意数量的空格; 它被忽略了.
在大多数情况下,空格可以包含空格和TAB.
有一个例外:如果您处于"规则上下文"中,则该行的第一个字符不能是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
Run Code Online (Sandbox Code Playgroud)
(假设这里的缩进开始于TAB而不是空格)"FOO"的最后一个赋值是在规则上下文中,并且将被视为"foo"的配方的一部分,而不是新的宏赋值.
总而言之,除非引入配方行,否则最好永远不要在makefile中使用TAB.