gpt4 book ai didi

makefile - GNU make 引用

转载 作者:行者123 更新时间:2023-12-05 00:04:29 25 4
gpt4 key购买 nike

引用有什么区别吗?

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.o b.o 的命令。即使您确实有 ar知道如何处理 -r libx.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 make 的能力)。另一方面,由于引号和空格的相互作用,这两个规则会产生略有不同的输出:
rule3:
@echo Compiler: $(CXX)

rule4:
echo "Compiler: $(CXX)"

rule3 会和 rule1 做同样的事情,但 rule4 会打印一个中间有一堆空格的字符串。

关于makefile - GNU make 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com