在 GNU Makefile 中,我使用多行变量语法定义临时文件的内容,如下所示:
define __FOO__
file
with
many
lines
endef
这个文件恰好是一个 GDB 脚本,它支持具有以下语法的函数定义:
define my-func
foo
end
我想你已经看到了问题:
define __FOO__
define my-func
foo
end
endef
make
吐出以下错误:
Makefile:218: *** missing 'endef', unterminated 'define'. Stop.
在我上面发布的链接中,GNU 自信地解释了该功能:
您可以嵌套定义指令:make 将跟踪嵌套指令并在它们没有全部被 endef 正确关闭时报告错误。请注意,以配方前缀字符开头的行被视为配方的一部分,因此出现在此类行上的任何 define 或 endef 字符串都不会被视为 make 指令。
因此,如果我听从该建议并\t
在每行的开头插入配方前缀字符 ( ):
define __FOO__
define my-func
foo
end
endef
它很高兴地解析了这个,但是当我将它写入配方中的文件时,现在每行的前面__FOO__
都有一个前导:\t
foo:
@echo $$__FOO__ > my-file
$ cat my-file
define my-func
foo
end
在很多情况下这可能没问题,但我可以想象它会导致一些潜在的模棱两可的内容,我宁愿明年不享受调试。
我应该如何处理这个 - 包括一个带有前导的字符串define
,并且在输出中没有前导选项卡?