首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Make中注释sh脚本

如何在Make中注释sh脚本
EN

Stack Overflow用户
提问于 2014-01-09 23:09:29
回答 1查看 144关注 0票数 0

Make的语义强制使用\分解复杂的sh脚本。把这些菜谱变成(任意长的)单行菜。因此,我不能使用#进行评论。Make函数$(info my comment goes here)工作,但是即使没有调用菜谱本身,注释也会打印出来。

我想要一些类似于sh的rem "string"

到目前为止,我使用的是Make中的$(call rem, my comment goes here),我将其定义为:

代码语言:javascript
复制
rem = $(if,$(1))

但我不想再发明车轮,如果已经存在,我只是错过了它。特别是,在sh,我想要保存管道的东西,或者至少是标准的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-10 00:30:12

您可以使用shell的“无所事事”操作符,即:。就像:

代码语言:javascript
复制
all:
        @echo "hi" ; : this is a comment ; echo "there"

请注意,shell确实会扩展这些字符,所以如果您想使用诸如引号、回退等特殊字符,如果您担心这些字符会导致问题,您应该将它们从shell中转义出来。

埃塔

如果您想要一些不会干扰shell行为的东西,比如管道,那么您就不能使用任何shell结构;所有可能的方法都会导致shell中的语法错误。

在文本调用shell之前,您必须使用make构造强制make来摆脱文本。你有作品的例子,但并不是因为你认为的原因。如果您真的想使用用户定义的函数rem,那么要运行它,就需要调用call,如下所示:

代码语言:javascript
复制
$(call rem, my comment goes here)

您的方法所做的是,由于没有定义函数rem,它正在查找名为rem my comment goes here的变量,并且该变量不存在,因此它扩展到空字符串。您可以通过让您的rem函数实际调用$(info ...)之类的方法来了解这一点:它永远不会被打印出来。

因此,您可以继续使用$(rem ...)语法,但也可以删除rem = $(if,$(1)),因为它无论如何都不使用,只会让人感到困惑。或者你可以用一些更小的东西,比如$(: my comment goes here)之类的。实际上,只要不展开为有效的变量名,就可以在其中放置任何内容。

我应该指出,这不一定是未来的证明;由于make中不再允许包含空格的变量名称,所以make可能会决定以一种不同的方式处理包含空格的变量引用,在将来的某个时候。

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

https://stackoverflow.com/questions/21033119

复制
相关文章

相似问题

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