生成文件规则中的命令只是简单地送入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