2011-04-20 131 views

回答

6

生成文件規則中的命令只是簡單地送入shell,所以引用絕對重要。此規則將工作:

libmylib.a: ... 
    $(AR) $(ARFLAGS) [email protected] $? 

但是這一次不會:

libmylib.a: ... 
    "$(AR) $(ARFLAGS) [email protected] $?" 

第二個將不即使你的工作,因爲你可能沒有叫,說一個指令,ar -r libx.a a.o b.o確實有一個ar命令知道如何處理-r libx.a a.o b.o參數列表。

你的第二個例子:

@echo Compiler: $(CXX) 
# vs 
@echo "Compiler: $(CXX)" 

是有點不同,因爲行情是圍繞參數內置echo所以這兩個規則的外殼:

rule1: 
    @echo Compiler: $(CXX) 

rule2: 
    echo "Compiler: $(CXX)" 

通常會產生相同的輸出(當然,除非你有一些奇怪的C++編譯器命令,例如其名稱中包含一個「>」,在這種情況下,所需的輸出對於任何一個命名C++編譯器的人來說都是一個好主意。這甚至超出了GNU m的能力AKE)。在另一方面,這兩個規則會產生輸出略有不同,由於行情的相互作用和空白:

rule3: 
    @echo Compiler:   $(CXX) 

rule4: 
    echo "Compiler:   $(CXX)" 

規則3會做同樣的事情,規則1,但rule4將打印字符串與一羣空白在中間。

+0

非常好的答案。謝謝! – pic11 2011-04-20 03:28:11