如何在 Windows 上将 GoogleTest 变量 GTEST_LIBRARY GTEST_INCLUDE_DIR 和 GTEST_MAIN_LIBRARY 设置为 CMake?

How to set GoogleTest variables GTEST_LIBRARY GTEST_INCLUDE_DIR and GTEST_MAIN_LIBRARY to CMake on Windows?

有一个项目是为 linux 环境开发的。现在我正在尝试使用 CMake 在 windows 上构建它。

我一直在尝试构建项目,但总是出现此错误:

CMake Error at C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
Call Stack (most recent call first):
C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files(x86)/CMake/share/cmake-3.3/Modules/FindGTest.cmake:204 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
C:/Users/awy9/git/cmake_modules/modules/SigeoGTest.cmake:21 (find_package)  
C:/Users/awy9/git/cmake_modules/modules/SigeoInit.cmake:29 (include)  
CMakeLists.txt:12 (include)

如何设置这些变量以在 Windows 立即处理此项目?

更新

@Tsyvarev 帮我解决了第一个问题,我引用他的话:

This is standard CMake message, when requested package(GTest in your case) is not found. You should install GTest before configuring your project. Or, if you already have installed it into non-standard location, pass this location via GTEST_ROOT variable: cmake -DGTEST_ROOT= ...

As alternative for the passing variable to cmake, you can set environment variable: set GTEST_ROOT=

这解决了 GTEST_INCLUDE_DIR 的问题,但我仍然有这些错误:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.3/Modules/FindPackageH andleStandardArgs.cmake:148 (message): Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)

解决方案

我发现在 Windows 环境中,某些值与手册中所说的不同。

编译Gtest后得到两个库:gtest.lib和gtest_main.lib 然后,我设置了这些文件路径变量:

GTEST_LIBRARY=C:\Users\awy9\Softwares\Gtest\gtest-1.7.0\Debug\gtest.lib GTEST_MAIN_LIBRARY=C:\Users\awy9\Softwares\Gtest\gtest-1.7.0\Debug\gtest_main.lib

现在一切正常!

谢谢

老实说,像 GTEST_LIBRARY 和 GTEST_MAIN_LIBRARY 那样设置硬编码变量并不是最好的主意。

我遇到了完全相同的问题。我在 windows 上使用 gtest 1.7.0 并得到同样的错误。 结果 "GTest" 应该是 "gtest"(不是大写)。

所以我的 CMakeLists.txt 中的代码变成了:

find_package(gtest REQUIRED)

请注意,我使用的是 CMake 3.9


编辑

我强烈建议您立即遵循本指南:

http://crascit.com/2015/07/25/cmake-gtest/

这是迄今为止我发现在您的 cmake 项目中使用未构建的 gtest 和 gmock 的最佳方法。

我在 Windows 平台上通过 GitHub 操作构建我的项目时遇到了类似的问题。

即使我导出 CMAKE_PREFIX_PATH 以使 find_package(GTest REQUIRED) 能够正确找到框架库(Windows 顺便说一句,有点讨厌),它仍然失败并显示 Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY). 请注意,它正确地获取了包含目录。

在深入研究这个问题后,我意识到在 Windows 上,没有任何 --config 选项的命令 cmake --build . --target install 会在 Debug 配置中构建库,与 Linux 和 macOS 相反。

如果您随后在 Release 中构建项目,例如cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . --config Release --target installfind_package(GTest REQUIRED) 将找不到任何 GTest 库,因为它会搜索不存在的 Release 构建。

在这种情况下,更好的解决方案是以 Release 模式 w.r.t 安装 GTest。硬编码库路径以获取 Debug\ 目录构建。

我还附上了可能对某人有帮助的 GitHub 操作步骤:

    steps:
    - name: Clone GTest
      shell: bash
      working-directory: ${{runner.workspace}}
      run: git clone https://github.com/google/googletest.git

    - name: Create GTest Build Environment
      shell: bash
      working-directory: ${{runner.workspace}}/googletest
      run: cmake -E make_directory build

    - name: Configure GTest CMake
      shell: bash
      working-directory: ${{runner.workspace}}/googletest/build
      run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_CXX_FLAGS=-std=c++11

    - name: Install GTest
      shell: bash
      working-directory: ${{runner.workspace}}/googletest/build
      run: cmake --build . --config $BUILD_TYPE --target install || sudo cmake --build . --config $BUILD_TYPE --target install

    - name: Export CMAKE_PREFIX_PATH on Windows
      shell: bash
      if: runner.os == 'Windows'
      run: echo '::set-env name=CMAKE_PREFIX_PATH::C:/Program Files (x86)/googletest-distribution'

    - name: Checkout
      uses: actions/checkout@v2

    - ... your project build steps