17

我正在尝试用反斜杠替换正斜杠。为此,我有以下代码行:

STRING(REGEX REPLACE "/" "\\" SourceGroup ${SourceGroupPath} )

SourceGroupPath = A/文件/路径。SourceGroup 是将结果设置为的变量。

我遇到的问题是代码的“\\”部分。我尝试了几种方法来使用像“\\”这样的反斜杠文字并使用unicode,但似乎没有任何效果。

我在 CMake 中遇到的错误是:

CMakeLists.txt:41 (STRING) 处的 CMake 错误:字符串子命令 REGEX,模式 REPLACE:replace-expression 以反斜杠结尾。

有人可以帮我吗?

谢谢,

沃特

4

2 回答 2

27

原因是在 CMake 字符串文字中,反斜杠是转义字符(就像在 C、Java 或 JavaScript 中一样),而在正则表达式中,反斜杠也是转义字符

因此,要将正则表达式表示为字符串文字,您需要双重转义。(这就是为什么许多“高级”语言都有正则表达式文字符号,顺便说一句。)

字符串文字"\\"表示内存中的字符串"\",这是一个无效的正则表达式,因此“以反斜杠结尾”错误。

字符串文字"\\\\"表示"\\"内存中的有效正则表达式(表示单个反斜杠)。

于 2010-12-20T15:12:16.547 回答
15

是一种更简单的方法:

file(TO_NATIVE_PATH ${MYPATH} MYPATH)
于 2013-11-15T13:37:11.023 回答