Windows下Conan引入gtest编译CMake项目出现Release/Debug版本不匹配
问题原因
该错误是C++运行库配置不匹配导致的:通过Conan默认安装的gtest为Release版本,使用MD_DynamicRelease运行库,迭代器调试级别为0;而CMake在Windows下默认生成Debug构建配置,编译出的main.obj使用MDd_DynamicDebug运行库,迭代器调试级别为2,二者链接时就会出现冲突。
解决方案
方案1:安装Debug版本gtest,编译Debug版本程序
执行conan install时指定构建类型为Debug,后续CMake构建也对应Debug配置即可:
mkdir build cd build conan install .. -s build_type=Debug cmake .. -DCMAKE_BUILD_TYPE=Debug cmake --build . --config Debug
方案2:编译Release版本程序
如果不需要调试功能,直接编译Release版本和已有的Release版gtest匹配即可:
mkdir build cd build conan install .. cmake .. -DCMAKE_BUILD_TYPE=Release cmake --build . --config Release
方案3:优化项目配置,减少手动操作
你当前的CMakeLists重复引入了多个Conan配置文件,可简化配置逻辑,直接使用Conan生成的目标,避免配置冲突,修改后的CMakeLists参考如下:
project(conan-myapp) cmake_minimum_required(VERSION 3.1) include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup(TARGETS) enable_testing() add_executable(myapp "main.cpp") target_link_libraries(myapp CONAN_PKG::gtest CONAN_PKG::gtest_main) add_test(myapp bin/myapp)
后续构建时只要保持Conan安装的依赖版本和CMake构建类型一致即可。
内容的提问来源于stack exchange,提问作者SebastianH
相关产品推荐
相关产品推荐

