2012-03-15 153 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,除非它引入了一個配方行。