Ссылки 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 вашего проекта для учета этого.