在CMake中以分号分隔的列表中转义"[]"字符

Che*_* Li 11 cmake

我发现"["和"]"可能在分号列表中有特殊含义CMake.当我尝试此代码时CMakeLists.txt:

set(XX "a" "b" "[" "]")
message("${XX}")

foreach(x ${XX})
        message("--> ${x}")
endforeach()
Run Code Online (Sandbox Code Playgroud)

我期待结果:

a;b;[;]
--> a
--> b
--> [
--> ]
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

a;b;[;]
--> a
--> b
--> [;]
Run Code Online (Sandbox Code Playgroud)

我没有找到任何关于"["和"]"用法的文档.是否可以逃避这些角色,以便获得预期的结果?我在用CMake 2.8.12.2.谢谢你的帮助 :)

And*_*nov 2

根据文档,方括号肯定有特殊含义:

注意: 3.0 之前的 CMake 版本不支持括号参数。他们将左括号解释为未引用参数的开始。

所以问题是混合引用和未引用的参数。您的情况的可能解决方法是在初始化中将左方括号替换为其他内容,然后将其替换回来,如下所示:

CMAKE_MINIMUM_REQUIRED (VERSION 2.8.11)
PROJECT (HELLO NONE)

SET(XX a b BRACKET ])

MESSAGE("${XX}")

FOREACH(x ${XX})
    STRING(REGEX REPLACE "BRACKET" "[" x ${x})
    MESSAGE("--> ${x}")
ENDFOREACH()
Run Code Online (Sandbox Code Playgroud)