生成文件規則中的命令只是簡單地送入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將打印字符串與一羣空白在中間。
非常好的答案。謝謝! – pic11 2011-04-20 03:28:11