Windows下CMake无法找到GTest的问题求助
问题场景
在Qt Creator中使用CMake构建Google Test项目,Google Test库存放路径为C:/cpplibraries/googletest-1.13.0,已完成该库的编译,且不想通过Git子模块方式集成到CMake配置中。尝试过将find_package改为小写gtest、设置GTest_ROOT和本地CMAKE_PREFIX_PATH指向库目录,但仍出现找不到GTest的错误。
自动生成的CMakeLists.txt代码
cmake_minimum_required(VERSION 3.5) project(testProj LANGUAGES CXX) enable_testing() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) if ($ENV{GOOGLETEST_DIR}) get_filename_component(_GTEST_BASE $ENV{GOOGLETEST_DIR} REALPATH) elseif (EXISTS "C:/cpplibraries/googletest-1.13.0") # set by QC get_filename_component(_GTEST_BASE "C:/cpplibraries/googletest-1.13.0" REALPATH) # set by QC endif() if (NOT GTEST_ROOT) if (_GTEST_BASE) message("Setting GTEST_ROOT to ${_GTEST_BASE}") set(GTEST_ROOT ${_GTEST_BASE}) else() message("No GTEST_ROOT specified - using system defaults.") endif() endif() find_package(GTest REQUIRED) if (NOT GTest_FOUND) message (FATAL_ERROR "No GTest Found") endif() add_executable(testProj main.cpp tst_testproj.cpp) add_test(NAME testProj COMMAND testProj) target_link_libraries(testProj PRIVATE GTest::GTest) if (GMock_FOUND) target_link_libraries(testProj INTERFACE GTest::GMock) endif()
执行配置时的错误信息
C:\Projects\testproj\CMakeLists.txt:25: error: Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY) Call stack: C:/Projects/testproj/CMakeLists.txt:25 (find_package) C:/Qt/Tools/CMake_64/share/cmake-3.27/Modules/FindGTest.cmake:270 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) C:/Qt/Tools/CMake_64/share/cmake-3.27/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE) C:/Qt/Tools/CMake_64/share/cmake-3.27/Modules/FindPackageHandleStandardArgs.cmake:230 (message)
解决方案
- 核心问题定位:当前CMakeLists.txt中
GTEST_ROOT指向的是Google Test的源码目录,而非编译后生成库文件的输出目录,FindGTest无法在源码目录中找到编译好的库文件。 - 调整GTEST_ROOT指向编译输出目录:
假设编译Google Test时将输出文件生成到C:/cpplibraries/googletest-1.13.0/build目录,修改CMakeLists.txt中的路径设置:elseif (EXISTS "C:/cpplibraries/googletest-1.13.0/build") # 指向编译输出目录 get_filename_component(_GTEST_BASE "C:/cpplibraries/googletest-1.13.0/build" REALPATH) endif() - 手动指定库和头文件路径(备选方案):如果调整
GTEST_ROOT后仍无法识别,可直接设置所需变量:# 根据你的编译配置(Debug/Release)调整库文件名 set(GTEST_INCLUDE_DIR "C:/cpplibraries/googletest-1.13.0/googletest/include") set(GTEST_LIBRARY "C:/cpplibraries/googletest-1.13.0/build/lib/Debug/gtestd.lib") set(GTEST_MAIN_LIBRARY "C:/cpplibraries/googletest-1.13.0/build/lib/Debug/gtest_maind.lib") find_package(GTest REQUIRED) - 验证编译产物:确认Google Test编译目录下存在
lib文件夹(包含gtest、gtest_main相关库文件)和include文件夹(包含gtest头文件),且编译配置(Debug/Release)与当前项目一致。
内容的提问来源于stack exchange,提问作者dfensdev
相关产品推荐
相关产品推荐

