var := 'C:/some/path here' labas
all:
@echo $(words $(var))
这将返回3
。
如何使其返回2
?还是make不符合我的想法?
答案 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不是适合您使用的工具。