OpenCV 3.1:如果源或bin路径包含"++",则出现CMake错误

bwe*_*ber 2 path cmake opencv3.0

如果CMake中的源路径或二进制路径包含字符序列"++"(不带引号),则在尝试为OpenCV 3.1创建项目时会出现CMake错误:

CMake Error at cmake/OpenCVUtils.cmake:76 (if):
  if given arguments:

    "G:/Desktop/C++ projects/project" "MATCHES" "^G:/Desktop/C++ projects/sources" "OR"     "G:/Desktop/C++ projects/project" "MATCHES" "^G:/Desktop/C++ projects/project"

  Regular expression "^G:/Desktop/C++ projects/sources" cannot compile
Call Stack (most recent call first):
  CMakeLists.txt:437 (ocv_include_directories)
Run Code Online (Sandbox Code Playgroud)

显然,OpenCVUtils中的这一行会导致问题:

if("${__abs_dir}" MATCHES "^${OpenCV_SOURCE_DIR}" OR "${__abs_dir}" MATCHES "^${OpenCV_BINARY_DIR}")

我注意到了这个问题,因为我有一个名为"C++ Projects"的文件夹,我保存了C++项目和库.有谁知道,为什么序列导致问题,如果有一个快速的方法来解决这个问题?我还将此报告为OpenCV错误跟踪器中的错误.

usr*_*567 5

+是模式匹配(文档)中使用的特殊字符.所述MATCHES指示图案匹配.

无论是字符串必须首先转义或真正的解决将是测试是否__abs_dir字符串的开头OpenCV_SOURCE_DIR:

string(FIND "${OpenCV_SOURCE_DIR}" "${__abs_dir}" strPosSrc)
string(FIND "${OpenCV_SOURCE_DIR}" "${__abs_dir}" strPosBin)
if (strPosSrc EQUALS 0 OR strPosBin EQUALS 0)
Run Code Online (Sandbox Code Playgroud)

所以基本上它是OpenCV中的一个错误.请他们修理它.

缺少CMake功能

总的来说,我认为这是一个缺少CMake功能,它没有提供一个转义输入字符串的方法.

有迹象表明,可以通过这样的功能来解决的bug:
https://cmake.org/Bug/view.php?id=15908
https://cmake.org/Bug/view.php?id=10365