是否有任何make变量支持带冒号的依赖文件名?

时间:2014-02-25 09:05:09

标签: makefile

我看到了这个问题:Escaping colons in filenames in a Makefile,它明确地引用了GNU make。接受的答案引用了discussion on the bug-make@gnu.org mailing list,其中明确指出这是不可能的; GNU make不支持名称中带冒号或空格的文件。

足够公平。但 make变种吗?我猜测答案仍然没有,但我想看看是否有一个比我的猜测更明确的答案。

1 个答案:

答案 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变体。