如何在Make中评论sh脚本

时间:2014-01-09 23:09:30

标签: bash makefile comments

Make的语义强制使用\分解复杂的sh脚本。将这些食谱变成(任意长的)单行。因此,我无法使用#进行评论。 Make函数$(info my comment goes here)有效,但即使没有调用配方本身,也会打印注释。

我希望在sh中有rem "string"之类的东西。

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

rem = $(if,$(1))

但是,如果某些事情已经存在,我想不要重新发明轮子,我只是错过了它。特别是,我想要保留管道的东西,或者至少是stdout。

1 个答案:

答案 0 :(得分:2)

您可以使用shell的do-nothing运算符,即:。所以喜欢:

all:
        @echo "hi" ; : this is a comment ; echo "there"

请注意 shell 确实扩展了这些,所以如果你想使用引号,反引号等特殊字符,如果你担心它们,你应该将它们从shell中删除引起问题。

ETA

如果你想要一些不会干扰管道等shell行为的东西,你就不能用任何shell构造做到这一点;所有可能的方法都会导致shell中的语法错误。

你必须使用make构造来强制make在调用shell之前去掉文本。你有一些工作的例子,但不是你想的原因。如果您真的想使用用户定义的函数rem然后运行它,则需要调用call,如下所示:

$(call rem, my comment goes here)

你的方法正在做什么,因为没有定义函数rem,它正在查找名为rem my comment goes here的变量,并且该变量不存在,所以它扩展为空字符串。您可以通过让rem函数实际调用$(info ...)或其他内容来自行查看:它永远不会打印出来。

因此,您可以继续使用$(rem ...)语法,但您也可以移除rem = $(if,$(1)),因为它无论如何都不会被使用,只会让人感到困惑。或者你可以使用像$(: my comment goes here)或其他更小的东西。实际上,只要它没有扩展为有效的变量名,你就可以放任何东西。

我应该指出,这不一定是面向未来的;因为make中不再允许包含空格的变量名,make可能会决定以不同的方式处理包含空格的变量 reference ,将来某个时候。