Conan安装GoogleTest后Debug模式出现未定义引用错误
解决Debug模式下GoogleTest未定义引用问题
以下是针对该问题的具体解决方案:
1. 正确使用Conan生成的CMake工具链文件
当前CMake配置未利用Conan生成的工具链文件,导致无法正确匹配Debug版本的GTest库。生成CMake构建目录时需指定对应工具链:
Debug模式构建命令:
cmake -S . -B cmake-build-debug -DCMAKE_TOOLCHAIN_FILE=cmake-build-debug/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Debug
Release模式构建命令:
cmake -S . -B cmake-build-release -DCMAKE_TOOLCHAIN_FILE=cmake-build-release/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
2. 明确指定Conan安装时的构建类型
安装依赖时需明确指定Debug/Release类型,避免默认使用Release构建Debug版本依赖:
安装Debug依赖:
conan install . --output-folder=cmake-build-debug --build=missing -s build_type=Debug
安装Release依赖:
conan install . --output-folder=cmake-build-release --build=missing -s build_type=Release
3. 优化CMakeLists配置
修改测试模块的CMakeLists.txt,移除冗余配置并简化链接逻辑:
# For now, we build as executable, in the future make it library add_executable(test-engine-mdh main.cpp) # Finds absl when installed system wide. find_package(GTest REQUIRED) find_package(Threads REQUIRED) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) target_include_directories(test-engine-mdh PRIVATE "include/") # 移除全局include_directories,导入目标会自动处理头文件路径 # include_directories(${GTest_INCLUDE_DIR}) target_link_libraries(test-engine-mdh Threads::Threads GTest::gtest GTest::gtest_main # 仅保留一个main入口,避免冲突 GTest::gmock # ... Any other linked libraries )
4. 验证依赖路径
检查Debug构建目录下的conaninfo.txt,确认GTest的构建类型为Debug,且CMake正确指向Debug版本的库文件。
以上步骤可确保CMake在Debug模式下链接到Conan安装的对应版本GTest库,解决未定义引用问题。
内容的提问来源于stack exchange,提问作者berkeyvx
相关产品推荐
相关产品推荐

