带有空格的Makefile字符串

时间:2019-06-01 21:35:23

标签: makefile gnu-make

var := 'C:/some/path here' labas
all:
    @echo $(words $(var))

这将返回3。 如何使其返回2?还是make不符合我的想法?

1 个答案:

答案 0 :(得分:1)

如果您认为make对任何类型的引号都有兴趣,那么make绝对不会按照您的想法工作:)。在几乎每种情况下,make都会忽略(即像其他字符一样对待普通字符)单引号和双引号字符,并且所有make函数都可以在简单的空格分隔符中工作,而无需考虑引号字符。

通常,将make与任何在目标名称中需要空格的系统一起使用是不切实际的。它只是行不通:太多的make都是基于空白作为分隔符,并且没有通用,通用的方法来逃逸可在任何地方使用的空白。

在非常特殊的情况下,您可以玩这样的把戏:

E :=
S := $E $E

path := C:/some/path here
xpath := $(subst $S,^,$(path))

var := $(xpath) labas
all:
        @echo $(words $(var))
        @echo $(subst ^,$S,$(var))

基本上,这会创建一个包含空格的变量$S,然后用其他一些非空格字符替换变量path中的所有空格(此处我选择了^您可以选择自己喜欢的字符,只需注意它必须是保证不会出现在路径中的字符即可。

现在此路径不包含空格,因此您可以将其与make函数一起使用。

这具有主要缺点:不仅在这里可见复杂性,而且请注意,这些路径不能在目标名称中使用,因为它们实际上并不存在于磁盘上。

通常,您不应简单地将包含空格的路径与make一起使用。如果必须使用包含空格的路径,则很可能make不是适合您使用的工具。