GNU Makefile宏规则

时间:2012-03-15 06:58:27

标签: makefile whitespace gnu space

在GNU中,Makfiles可以在宏定义之前有前导空格吗?以及允许的空格类型(制表符,换行符,空格......)

谢谢!

2 个答案:

答案 0 :(得分:5)

宏可以在宏名称之前有任意数量的空格;它被忽略了。

在大多数情况下,空格可以包含空格和TAB。

有一个例外:如果您处于“规则上下文”中,该行的第一个字符不能是TAB(如果是,则该行被视为该规则的配方的一部分而不是进行宏分配)。

对于大多数人来说,“规则上下文”的定义是令人惊讶的:请注意,注释,空行,甚至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

(假设这里的缩进以TAB开头而不是空格)“FOO”的最后一个赋值在规则上下文中,将被视为“foo”的配方的一部分,而不是新的宏赋值。

总而言之,除非引入配方行,否则最好永远不要在makefile中使用TAB。

答案 1 :(得分:0)

经过大量搜索:

来自GNU make:

“变量名称可以是不包含':','#','='或前导或尾随空格的任何字符序列。”