【问题标题】:How to compile googletest on windows using mingw with msys?如何使用 mingw 和 msys 在 Windows 上编译 googletest?
【发布时间】:2011-07-12 00:26:57
【问题描述】:

我的需求很简单。我必须在 Windows 上使用 MinGW 和 msys 编译和使用 googletest。有人有这方面的经验吗?

感谢您的回答。

【问题讨论】:

  • 请描述发生了什么问题。
  • 我已经取得了一些进展。如果没有我没有的 python,它似乎无法安装。我现在正准备解决它。

标签: c++ windows mingw googletest


【解决方案1】:

我花了一些时间,但我想通了。这是为面临同样问题的任何人提供的指南。

要能够在 Windows 上编译 GoogleTest,请遵循以下说明:

  1. 我假设您安装了带有 MSYS 的 MinGW。

  2. 从官方网站http://www.cmake.org/下载并安装CMake。使用 Win32 安装程序 版本。完成安装过程后,从 “xxx/CMake/bin”到“xxx/MinWG/bin”。

  3. http://www.python.org/ 下载并安装 Python。同样,Windows 安装程序完成了这项工作 美好的。 完成安装过程后,复制“python.exe” 形成 python 文件夹到 “xxx/MinWG/bin”。

  4. http://code.google.com/p/googletest/ 下载最新的稳定版 GoogleTest 并将其解压到某个文件夹中。

  5. 运行 MSYS 终端并执行以下命令。

    cd xxx/gtest-x.x.x
    cmake -G "MSYS Makefiles"
    make
    
  6. 如果您有来自 pthread 的编译错误,请遵循 these 说明。

  7. 将包含文件夹“xxx/gtest-x.x.x/include”复制到您的 MinGW gcc 包含中。 将库文件“xxx/gtest-x.x.x/*.a”复制到您的 MinGW gcc 库中。

  8. 在编译测试时,将“-lgtest”参数添加到 gcc。

编辑 评论员是对的。可执行文件的处理对我有用,但总的来说这不是一个好习惯。尝试改用symbolic link

【讨论】:

  • 为什么要复制而不是符号链接那些可执行文件?
  • 实际上 CMake 和 Python 都不是静态构建的,因此从 msys shell 调用时它们都不起作用(崩溃和无限循环)。
【解决方案2】:

作为替代方案,也可以使用通常的 MSYS/Mingw 构建 googletest。

所以这是我的替代方法:

  1. 确保在您的 Windows 上安装了 MSys/MingW 并设置了 PATH 环境

  2. 打开一个 cmd 窗口 - 您也可以在此处明确设置 PATH

  3. CD 到解压后的 googletest 目录

  4. 使用 sh(MSys 的一部分)调用配置:sh configure

  5. 呼叫make -> libgtest.a 应该被建立。它位于您的 googletest-directory lib/.libs 子目录中

  6. 请参阅 googletest 的自述文件,了解如何将 libgtest.a 集成到您的系统中。另请参阅如何编译的googletest wiki 中的 googletest 入门。或者指定 gcc -L<googleTestDir>/lib/.libs 的库路径并添加 -lgtest 以链接到您的测试项目可执行文件。

  7. 当使用ASSERT_DEATH 宏检查测试代码中的断言(意味着在您的库或应用程序中,而不是在 googletest 中的断言)时,调用 SetErrorMode - 示例 main:

    #include <windows.h>
    #include "gtest/gtest.h"
    
    int main (int argc, char** argv)
    {
        // this prevents annoying error message boxes popping up
        // when assert is called in your program code
        SetErrorMode(SEM_NOGPFAULTERRORBOX);
        ::testing::InitGoogleTest(&argc, argv);
        return RUN_ALL_TESTS();
    }
    

【讨论】:

    【解决方案3】:

    只要您的路径中有二进制文件,您就不需要复制它们。安装 python 和 CMake。在你的 msys(MinGW 控制台)中测试它们

    which cmake
    which python
    

    如果你看到了路径,那么你就有了二进制文件。如果没有,请将它们的路径添加到您的环境变量>PATH 或仅在 msys 中更新(如有必要,更新安装路径)

    export PATH=$PATH:/c/Program Files (x86)/CMake/bin/cmake.exe:/c/Python27/python.exe
    

    然后你可以按照建议构建:

    cd xxx/gtest-x.x.x
    cmake -G "MSYS Makefiles"
    make
    

    测试是否一切正常:

    cd make
    make
    ./sample1_unittest.exe
    

    【讨论】:

      【解决方案4】:

      要在不使用 cmake/python 而仅使用 mingw make 的情况下构建 libgtest.a,gtest 现在有一个“make”文件夹,其中包含一个普通的旧 makefile。

      1. 确保 mingw\bin 在路径中(尝试运行“g++”之类的)。
      2. 进入 gtest 'googletest\make' 文件夹并运行 'make'。
      3. 要进行测试,请运行“sample1_unittest”(应显示 gtest 示例测试输出)。
      4. 要生成库“libgtest.a”,请运行“ar -rv libgtest.a gtest-all.o”

      创建的库是一个完整的静态库,没有生成任何 dll。

      应该就是这样了。

      顺便说一句,这也适用于构建 googlemock,只需输入 googlemock 文件夹而不是 googletest,然后按照相同的步骤进行操作即可。

      【讨论】:

      • 感谢@jesper-matthiesen 成功了。如果有人遇到 ld.exe 的错误找不到 lpthread。尝试运行 link 的评论中提到的 mingw-get install libpthreadgc-dev。谢谢
      【解决方案5】:

      来自https://github.com/google/googletest/tree/master/googletest的自述文件 : 将 Google Test 构建为独立项目时,典型的工作流程开始 与:

      mkdir mybuild       # Create a directory to hold the build output.
      cd mybuild
      cmake ${GTEST_DIR}  # Generate native build scripts.
      

      如果你想构建谷歌测试的示例,你应该替换最后一个命令 与

      cmake -Dgtest_build_samples=ON ${GTEST_DIR}
      

      【讨论】:

        【解决方案6】:

        这个问题是在 2011 年提出的,得票最多的答案也在同年得到了回答。因此,一个新的答案会提高问题的有效性。

        您需要和我测试过的工具:

        Mingw64 8.0.2

        GoogleTest GitHUb Source Code repo branch 1.10.0

        CMake 3.20.4

        和 Windows10

        步骤

        • 通过双击安装mingw64并选择正确的路径 目录名称之间没有空格,例如“程序文件”

        • 打开windows的设置,然后搜索环境变量 并打开对话框编辑Path环境变量

        • 在Windows路径环境中添加mingw64/bin目录名 变量,例如C:\Users[USERNAME]\mingw64\bin(替换 [USERNAME] 使用您的用户名,例如迈克尔或李等)

        • 安装 CMake。这是双击安装程序。确保它的 在 Path 环境变量中添加 bin 目录路径。 它将安装在 C:/Program Files/...

        • 下载 GoogleTest repo 解压它并创建一个构建目录 在提取的目录中。

        • 执行以下命令

          $ cd 构建

          $ cmake .. -G "MinGW Makefiles"

          $ mingw32-make.exe

        • 从构建目录复制四个静态库(*.a)

        [例如:C:\Users[USERNAME]\sourcecodes\googletest-master\build\lib]

        进入 MingW64 的库

        [例如:C:\Users[用户名]\mingw64\x86_64-w64-mingw32\lib]

        • 转到 GoogleTest 提取的存储库,导航到

        [例如 C:\Users[USERNAME]\sourcecodes\googletest-master\googletest\include\gtest]

        复制整个 gtest 目录并复制到该文件夹​​

        C:\Users[用户名]\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include

        你已经完成了。您可以构建 Googltest 并将其与您的 C++ 项目链接。我还粘贴了一个 CMakelists.txt 示例

        cmake_minimum_required(VERSION 3.12)
        
        project(ProjectName VERSION 1.0.0 LANGUAGES CXX)
            
        include_directories(include)
        
        set(SOURCES src/library.cpp include/library.h)
        add_executable(libabc ${SOURCES})
        
        #############
        ## Testing ##
        #############
        
        enable_testing()
        find_library(GTest gtest)
        
        add_executable (unitTest test/unit_test.cpp)
        target_link_libraries (unitTest gtest gtest_main)
        add_test(AllFactTest unitTest)
        

        我希望它会起作用。

        【讨论】:

          猜你喜欢
          • 2021-02-09
          • 1970-01-01
          • 2014-03-27
          • 2020-11-22
          • 1970-01-01
          • 2011-11-07
          • 2013-05-14
          • 2017-03-04
          • 1970-01-01
          相关资源
          最近更新 更多