Ссылки CMake RelWithDebInfo на отладочные библиотеки
у меня есть проект, который ссылается на полдюжины библиотек, среди них OpenCV.
Поскольку вариант выпуска сбой, в то время как отладка работает нормально (просто намного медленнее), я хотел скомпилировать свой проект в RelWithDebInfo
конфигурации.
Однако,Debug
версия библиотек OpenCV включается вместо Release
(OpenCV не имеет RelWithDebInfo
вариант). Это вызывает ошибки связывания, такие как:
opencv_core249d.lib (alloc.obj): ошибка LNK2038: обнаружено несоответствие для "RuntimeLibrary": значение "MDd_DynamicDebug" не соответствует значению "MD_DynamicRelease" в MyProject.параметр obj
как решить эту проблему?
2 ответов
решение: добавить в CMakeLists.txt, после вызова FIND_PACKAGE(OpenCV)
:
set_target_properties(${OpenCV_LIBS} PROPERTIES MAP_IMPORTED_CONFIG_RELWITHDEBINFO RELEASE)
Я использовал приведенный выше ответ Dženan, но обнаружил, что некоторые библиотеки opencv игнорируют это и все еще ссылаются на отладку! Это приводит к проекту msvc, который связывает смешанные библиотеки выпуска и отладки для opencv. Моим решением было создать новый OpenCVModules-relwithdebinfo.cmake в lib-директории установки opencv, которая является копией OpenCVModules-release.файл cmake. Затем замените все ссылки на выпуск RELWITHDEBINFO. Это создает проект msvc, полностью связанный с opencv библиотеки-релизе. Дополнительным преимуществом является то, что вам не нужно изменять файлы CMake вашего проекта для учета этого.