如何在Windows上设置GoogleTest变量GTEST_LIBRARY GTEST_INCLUDE_DIR和GTE

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

本文关键字:GTEST LIBRARY INCLUDE DIR GTE 变量 Windows GoogleTest 设置      更新时间:2023-10-16

有一个为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上?

老实说,像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的最佳方法。

UPDATE

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

这是标准的CMake消息,当请求的包(GTest在你的情况下)没有找到。您应该在配置项目之前安装GTest。或者,如果您已经将它安装到非标准位置,通过GTEST_ROOT变量传递此位置:cmake -DGTEST_ROOT=…

作为将变量传递给cmake的替代方法,您可以设置环境变量:

这解决了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)

<

解决方案/strong>

我发现在Windows环境下有些值和手册上说的不一样。

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

GTEST_LIBRARY = C: awy9 用户软件gt gtest-1.7.0 gtest.lib调试GTEST_MAIN_LIBRARY = C: awy9 用户软件gt gtest-1.7.0 调试 gtest_main.lib

现在一切正常!

谢谢

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

即使我导出CMAKE_PREFIX_PATH以使find_package(GTest REQUIRED)能够正确地找到框架库(Windows是有点讨厌的BTW),它仍然与Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)失败。请注意,它会正确地获取include目录。

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

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

在这种情况下,一个更好的解决方案是在Release模式下安装GTest, w.r.t.硬编码库路径以获取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