【发布时间】:2016-07-11 11:39:49
【问题描述】:
我想在 Makefile 的定义指令中注释一行或多行,以便在扩展指令时忽略该行。目标是放置注释行作为我的 Makefile 用户的提示,以显示定义指令中可能包含的内容的示例。该指令被扩展为一个目标。
换句话说,我想要那个 Makefile
define ECHO_FOO =
# @echo foo
endef
all:
@echo Before call
$(ECHO_FOO)
@echo After call
.PHONY: all
具有与此相同的行为:
define ECHO_FOO =
endef
all:
@echo Before call
$(ECHO_FOO)
@echo After call
.PHONY: all
问题是第一个 Makefile 给了我以下错误:
process_begin: CreateProcess(NULL, #@echo foo, ...) 失败。 make (e=2): 系统找不到指定的文件。 Makefile:6:目标“全部”的配方失败 make: *** [all] 错误 2
GNU make:Makefile contents 页面声明:
在定义指令中,在定义变量期间不会忽略 cmets,而是在变量值中保持原样。扩展变量时,它们将被视为 make cmets 或配方文本,具体取决于评估变量的上下文。
但这并没有解释在哪种特定情况下 # 符号被视为制作评论或配方文本(这似乎是我遇到的问题)。
谁能告诉我如何在定义函数中将# 符号视为注释标记?
我已经尝试了以下所有行,想转义# 符号或更改缩进,但它们都没有给我正确的输出:
#@echo foo
#@echo foo
##@echo foo
##@echo foo
\#@echo foo
\#@echo foo
/#@echo foo
/#@echo foo
我在 Windows 上运行 MinGW make 3.82,但我已经尝试过 make v3.82.90 和 4.1 的其他实现。
【问题讨论】: