引用有什么不同吗?
libmylib.a: ...
$(AR) $(ARFLAGS) $@ $?
# vs
libmylib.a: ...
"$(AR) $(ARFLAGS) $@ $?"
@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"谢谢!
发布于 2011-04-20 09:46:41
makefile规则中的命令只是提供给shell,所以引用绝对重要。此规则将起作用:
libmylib.a: ...
$(AR) $(ARFLAGS) $@ $?但这一条不会:
libmylib.a: ...
"$(AR) $(ARFLAGS) $@ $?"第二种方法不起作用,因为您可能没有一个名为ar -r libx.a a.o b.o的命令,即使您有一个知道如何处理-r libx.a a.o b.o参数列表的ar命令。
您的第二个示例:
@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"略有不同,因为引号包含外壳内置echo的参数,因此这两条规则:
rule1:
@echo Compiler: $(CXX)
rule2:
echo "Compiler: $(CXX)"通常会产生相同的输出(当然,除非你有一些奇怪的C++编译器命令,例如,它的名称中有一个">“,在这种情况下,对于命名你的C++编译器的人来说,期望的输出将是一记耳光,这甚至超出了GNU make的能力范围)。另一方面,由于引号和空格的交互作用,这两个规则会产生略有不同的输出:
rule3:
@echo Compiler: $(CXX)
rule4:
echo "Compiler: $(CXX)"rule3会做与rule1相同的事情,但是rule4会打印一个中间有一堆空格的字符串。
https://stackoverflow.com/questions/5724620
复制相似问题