我不确定我是否已正确描述了这个问题,但目前我正在通过以下方式解决这个问题
QUOTEDSTR := "hello world"
NORMALSTR := $(shell echo $(QUOTEDSTR))
Run Code Online (Sandbox Code Playgroud)
是否有更多的内置方式'make'可以在不调用shell的情况下执行此操作?谢谢
另外一个选项:
NORMALSTR := $(patsubst "%",%,$(QUOTEDSTR))
Run Code Online (Sandbox Code Playgroud)
Beta的答案将删除字符串中的每个引号.上述解决方案只会删除出现在开头和结尾的引号.例如:
QUOTEDSTR := -DTITLE=\"Title\"
Run Code Online (Sandbox Code Playgroud)
Beta的回答将导致-DTITLE=\Title\使用patsubst解决方案时的值,此值不会更改.
这取决于你想要什么.
编辑
如果你想处理空格并且仍然只按照@ stefanct的评论在变量的开头/结尾匹配引号,你将不得不玩一些技巧.首先,您需要找到一个非空白字符,您知道该字符永远不会出现在字符串中.让我们选择,^但如果你愿意,你可以选择别的东西.
算法是:将所有空格转换为此字符,然后从生成的单个"单词"中删除引号,然后将该字符的所有实例转换回空格,如下所示:
# Get a variable S that contains a single space
E :=
S := $E $E
NORMALSTR := $(subst ^,$S,$(patsubst "%",%,$(subst $S,^,$(QUOTEDSTR))))
Run Code Online (Sandbox Code Playgroud)
当然还有并发症; 这只处理空格,例如,不处理其他空白字符,如TAB.
| 归档时间: |
|
| 查看次数: |
4490 次 |
| 最近记录: |