首页
学习
活动
专区
圈层
工具
发布

GNU报价
EN

Stack Overflow用户
提问于 2011-04-20 09:32:18
回答 1查看 777关注 0票数 4

引用有什么不同吗?

代码语言:javascript
复制
libmylib.a: ...
    $(AR) $(ARFLAGS) $@ $?
# vs
libmylib.a: ...
    "$(AR) $(ARFLAGS) $@ $?"


@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-20 09:46:41

makefile规则中的命令只是提供给shell,所以引用绝对重要。此规则将起作用:

代码语言:javascript
复制
libmylib.a: ...
    $(AR) $(ARFLAGS) $@ $?

但这一条不会:

代码语言:javascript
复制
libmylib.a: ...
    "$(AR) $(ARFLAGS) $@ $?"

第二种方法不起作用,因为您可能没有一个名为ar -r libx.a a.o b.o的命令,即使您有一个知道如何处理-r libx.a a.o b.o参数列表的ar命令。

您的第二个示例:

代码语言:javascript
复制
@echo Compiler: $(CXX)
# vs
@echo "Compiler: $(CXX)"

略有不同,因为引号包含外壳内置echo的参数,因此这两条规则:

代码语言:javascript
复制
rule1:
    @echo Compiler: $(CXX)

rule2:
    echo "Compiler: $(CXX)"

通常会产生相同的输出(当然,除非你有一些奇怪的C++编译器命令,例如,它的名称中有一个">“,在这种情况下,对于命名你的C++编译器的人来说,期望的输出将是一记耳光,这甚至超出了GNU make的能力范围)。另一方面,由于引号和空格的交互作用,这两个规则会产生略有不同的输出:

代码语言:javascript
复制
rule3:
    @echo Compiler:           $(CXX)

rule4:
    echo "Compiler:           $(CXX)"

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5724620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档