You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:49