2016-02-01 2 views
2

Если исходный или двоичный путь в CMake содержит последовательность символов «++» (без кавычек), я получаю ошибку CMake при попытке создать проект для OpenCV 3.1:OpenCV 3.1: Ошибка CMake, если путь источника или bin содержит «++»

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) 

Видимо эта линия внутри OpenCVUtils вызывает проблему:

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

Я заметил эту проблему, потому что у меня есть папка с именем "C++ Projects", где я храню C++ проекты и библиотеки , Кто-нибудь знает, почему последовательность вызывает проблему, и есть ли быстрый способ исправить это? Я также сообщу об этом как об ошибке в отслеживании ошибок OpenCV.

+0

Просто переименовал свой 'C++' директории для 'cpp', чтобы избежать всех таких ситуаций с CMake в других проектах в будущем. –

ответ

5

+ - специальный символ, используемый в шаблоне сопоставив (documentation). MATCHES указывает соответствие шаблонов.

Либо строки должны быть экранированы первым или реальное исправление было бы проверить, является ли __abs_dir является beginning of the string из 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) 

Так в основном это ошибка в OpenCV. Попросите их исправить это.

Отсутствует CMake функция

В общем, я думаю, что это не хватает CMake особенность, что она не обеспечивает способ, чтобы избежать ввода строки.

Есть ошибки, которые могут быть решены с помощью такой функции:
https://cmake.org/Bug/view.php?id=15908
https://cmake.org/Bug/view.php?id=10365

+0

Да, я знаю, что «+» используется в регулярных выражениях. Однако сингл + не вызывает ошибку, только двойную. Есть ли способ автоматически избежать таких символов в строке в cmake? – user1488118

+0

Действительно ли метод подстроки делает то же самое? Я думаю, что он вернет true, если 'OpenCV_SOURCE_DIR' является подкаталогом' __abs_dir', а не только в том же каталоге. Кроме того, я полагаю, что ваша вторая строка выше должна быть 'string (FIND) $ {OpenCV_BINARY_DIR}" "$ {__ abs_dir}" strPosBin) ', не так ли? – user1488118

+0

О, спасибо, я использовал подстроку неоднозначную, исправленную сейчас. Я не знаю о команде, которая помещает вашу строку. Взгляните на http://stackoverflow.com/questions/13569660/cmake-escaping-symbols-inside-a-variable-in-regular-expressions – usr1234567

Смежные вопросы