CMAKE中的REGEX_Replace(不能正确理解命令)

时间:2018-01-29 15:36:59

标签: replace makefile cmake

对不起,如果这看起来像是一个菜鸟问题,但我在理解这个命令方面遇到了问题,谷歌对我没有帮助。

说我有这个CMake脚本:

设置(OUTDIR $ {CMAKE_CURRENT_BINARY_DIR} / MyFolder) 字符串(REGEX REPLACE" /"" \" OUTDIR $ {OUTDIR})

我在一本书中找到了类似的例子。我尝试阅读那里的解释以及文档但我仍然不完全清楚该代码片段的作用。据我从文档中了解: REGER REPLACE将取代" /"用" \"每次找到它并在输出中返回结果。那么在这种情况下输出会是什么? ' OUTDIR'文件夹是上面定义的路径与set?我不明白为什么它的外出价格{OUTDIR}'而不仅仅是' $ {OUTDIR}'。请通过解释该片段帮助我清除这种混乱。谢谢

1 个答案:

答案 0 :(得分:0)

你理解第一部分几乎是正确的。问题是 REGEX REPLACE 之后的前两个字符串文字是两个RegExes(正则表达式)。因此,此函数将在您指定的最后一个字符串中找到第一个RegEx的所有匹配项,并将使用来自第二个RegEx的值替换它们。结果将保存在最后一个字符串变量之前。

现在,在正则表达式中,某些字符具有特殊含义,它们被命名为特殊字符。反斜杠就是其中之一。如果您希望将此角色视为普通角色,则必须转义,并在其前面添加反斜杠。

现在,在一个CMake字符串文字中,你还必须转义反斜杠字符,在它之前加上另一个反斜杠。

话虽如此,为了让您的代码在 OUTDIR 中替换所有 / \ ,您可能希望这样写:< / p>

set (OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/MyFolder)
string (REGEX REPLACE "/" "\\\\" OUTDIR ${OUTDIR})

这是一个相关的问题:CMake: how to get the backslash literal in Regexp replace?

您可以在此处了解有关RegEx的更多信息:https://www.regular-expressions.info