Makefile GNU制造报价
引用有什么区别吗Makefile GNU制造报价,makefile,gnu-make,Makefile,Gnu Make,引用有什么区别吗 libmylib.a: ... $(AR) $(ARFLAGS) $@ $? # vs libmylib.a: ... "$(AR) $(ARFLAGS) $@ $?" @echo Compiler: $(CXX) # vs @echo "Compiler: $(CXX)" 谢谢 makefile规则中的命令只是简单地馈送到shell,因此引用绝对重要。这条规则将在以下情况下起作用: libmylib.a: ... $(AR) $(ARFLAGS)
libmylib.a: ...
$(AR) $(ARFLAGS) $@ $?
# vs
libmylib.a: ...
"$(AR) $(ARFLAGS) $@ $?"
@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"
谢谢 makefile规则中的命令只是简单地馈送到shell,因此引用绝对重要。这条规则将在以下情况下起作用:
libmylib.a: ...
$(AR) $(ARFLAGS) $@ $?
但这个不会:
libmylib.a: ...
"$(AR) $(ARFLAGS) $@ $?"
第二个命令不起作用,因为您可能没有一个单独的命令,比如说,ar-r libx.a a a.o b.o
,即使您有一个ar
命令知道如何处理-r libx.a a a.o b.o
参数列表
你的第二个例子:
@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"
有点不同,因为引号围绕着shell内置的echo
的参数,所以这两条规则:
rule1:
@echo Compiler: $(CXX)
rule2:
echo "Compiler: $(CXX)"
通常会产生相同的输出(当然,除非你有一些奇怪的C++编译器命令,例如,它的名字中有一个“>”,在这种情况下,所需的输出将是一个向上的头,无论是谁命名你的C++编译器,都超出了GNU的能力。另一方面,由于引号和空格的交互作用,这两个规则将产生稍微不同的输出:
rule3:
@echo Compiler: $(CXX)
rule4:
echo "Compiler: $(CXX)"
Rule3将做与Reule1相同的事情,但是Rule4将在中间打印一组空白的字符串。