我看到了这个问题:Escaping colons in filenames in a Makefile,它明确地引用了GNU make。接受的答案引用了discussion on the bug-make@gnu.org mailing list,其中明确指出这是不可能的; GNU make不支持名称中带冒号或空格的文件。
足够公平。但有 make
变种吗?我猜测答案仍然没有,但我想看看是否有一个比我的猜测更明确的答案。
答案 0 :(得分:2)
你可以种类使用冒号,但它需要额外的工作。如果你用反斜杠转义它,你可以在目标或先决条件中使用冒号......但是如果你在食谱中使用该变量,它也会用反斜杠转义:
FOO = biz\:baz
all: foo\:bar $(FOO) ; @echo '$@: $^'
foo\:bar: ; @echo '$@'
$(FOO): ; @echo '$@' '$(FOO)'
这给出了:
foo:bar
biz:baz biz\:baz
all: foo:bar biz:baz
请注意$(FOO)
(仅限于!)的扩展如何包含反斜杠。所以,虽然它可行,但它有问题。当你开始使用它时,你会遇到各种各样的问题。
对于空格,您也可以使用反斜杠在目标和先决条件中转义它。然而,问题再一次是反斜杠有时包含在配方中而不是其他时间。空白有一个更大的问题,因为使用操作单词的函数不能反斜杠,所以像addsuffix
等这样的东西将无法正常工作。
我现在还没有意识到任何能更好地处理这个问题的通用make变体。