如何在Makefile中添加多行注释

146

在makefile中是否有像C语法中的/* */一样的方法可以注释掉多行代码?


你使用的 make 版本是什么? - egrunin
6个回答

192

不,makefile中没有类似于C语言的/* */注释。正如其他人建议的那样,您可以通过使用行连接符来创建多行注释。例如:

# This is the first line of a comment \
and this is still part of the comment \
as is this, since I keep ending each line \
with a backslash character

然而,我猜想您可能是为了调试原因想要临时注释掉一部分makefile,而在每行末尾添加反斜杠并不实用。如果您正在使用GNU make,请使用ifeq指令以明确错误的表达式。例如:

ifeq ("x","y")
# here's all your 'commented' makefile content...
endif

3
请注意,如果您想在规则中“注释掉”某些行,请不要缩进ifeq和endif行。 - Simon Márton

17

我认为答案是否定的。我能找到的唯一的注释样式是在每行前加上#,或者用\将第一行包裹起来。


13

关于在make(1)中使用ifeq来进行多行注释的想法,请注意:这种方法并不是非常有效,因为如果您编写以下内容:

ifeq (0,1)
    do not risk ifeq comments
    else trouble will find you
    ifeq is even worse
endif

ifeq和endif之间的文本仍将被make解析,这意味着您不能在该部分中编写任何您想要的内容。如果您想编写长注释并在注释中编写您想要的任何内容(包括具有make含义的$符号、冒号和更多内容),则必须注释每一行。那么为什么使用ifeq呢...:)


那不正确。gmake对ifeq内部的文本唯一的“解析”是查找endif。您可以使用具有ifeq内部某些虚假语法的makefile轻松验证此操作。只要ifeq中的条件计算为false,gmake就会快乐地忽略ifeq内部的语法错误。 - Eric Melski
3
这不正确。尝试以下示例:如果相等(0,1) 不要冒险ifeq注释 否则麻烦会找到你 结束如果开头的else会导致make出错。因此,elseifeqifneq及可能许多其他符号将引起问题。 - Mark Veltzer
这是一个公正的观点,但大多数语法错误将被忽略。 - Eric Melski

8
define BOGUS
lines
.....
endef

1
我想应该和“ifeq”一样有相同的注意事项,但对我来说可行。谢谢! - jcomeau_ictx

5

虽然不完全符合您的要求,但在精神上相似。我并不指望它成为被接受的答案,但或许可以帮助某些人。

假设您正在VIM中编辑makefiles:
要么决定要注释哪些行,要么使用“v”选择它们。

然后,您可以使用正则表达式s/^/#/来注释掉这些行
s/^#//来恢复它们。

--注释--

  • 要打开vim命令行,请按:(冒号)
  • 要准备好下一个“n”行的命令,请使用.,+n
  • 使用“v”的示例行看起来像:'<,'>s/^/#/

3
建议使用块模式。移动光标到第一行开头进行注释,按Ctrl + V,向下箭头移动直到末尾,按大写字母I,输入#号,按Esc键。 若要删除注释,请按Ctrl + V,一直向下移动光标,按x键。 - brunch875

3
在Emacs中,您可以标记要注释的区域,然后按下M-;(它运行comment-dwim)来注释掉该区域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接