Make的语义强制使用\
分解复杂的sh脚本。将这些食谱变成(任意长的)单行。因此,我无法使用#
进行评论。 Make函数$(info my comment goes here)
有效,但即使没有调用配方本身,也会打印注释。
我希望在sh中有rem "string"
之类的东西。
到目前为止我使用的是$(call rem, my comment goes here)
在Make中,
我定义为:
rem = $(if,$(1))
但是,如果某些事情已经存在,我想不要重新发明轮子,我只是错过了它。特别是,我想要保留管道的东西,或者至少是stdout。
答案 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 ,将来某个时候。