另外一个选择:
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
Beta 的答案将删除字符串中的每个引号。上述解决方案只会删除出现在开头和结尾的引号。例如:
QUOTEDSTR := -DTITLE=\"Title\"
Beta 的答案将得出以下值-DTITLE=\Title\
使用 patsubst 解决方案时,该值不会改变。
这取决于你想要什么。
EDIT
如果你想处理空格并且仍然只匹配变量开头/结尾处的引号(按照 @stefanct 的评论),你就必须玩一些技巧。首先,您需要找到一个您知道永远不会出现在字符串中的非空白字符。我们来选择一下^
但如果您愿意,您可以选择其他内容。
该算法是:将所有空格转换为该字符,然后从生成的单个“单词”中删除引号,然后将该字符的所有实例转换回空格,如下所示:
# Get a variable S that contains a single space
E :=
S := $E $E
NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))
当然,仍然存在一些复杂的情况;例如,这仅处理空格,而不处理其他空白字符(如 TAB)。