2012-03-15 155 views

回答

0

很多搜​​索的后:

从GNU使:

“的变量名可以是不含有任何字符序列‘:’,‘#’,‘=’,或前导或尾随空白“。

+0

实际上,一个变量名只能包含任何字符,只要你在赋值中没有修饰空格(即'name:=带空格的文本',然后'$ {name}:= text' _will_ work,和'$ {带空格的文本}'将会适当地展开)。 – bobbogo 2013-02-28 12:59:42

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而不是空格开始)的“富”的最后一个任务是在一个规则,并且将被认为是配方的一部分,“富” ,而不是一个新的宏分配。

总而言之,最好不要在makefile中使用TAB,除非它引入了一个配方行。