2011-04-20 95 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