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错误跟踪器中的错误.
+是模式匹配(文档)中使用的特殊字符.所述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