12

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

感谢您的回答。

4

6 回答 6

16

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

为了能够在 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 文件夹中的“python.exe”复制到“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 的编译错误,请遵循这些说明。

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

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

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

于 2011-03-12T12:37:03.400 回答
3

要在没有 cmake/python 的情况下构建 libgtest.a,但只使用 mingw make,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,然后按照相同的步骤进行操作。

于 2016-10-18T15:15:01.157 回答
2

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

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

如果您想构建 Google Test 的示例,您应该将最后一个命令替换为

cmake -Dgtest_build_samples=ON ${GTEST_DIR}
于 2021-01-09T09:52:45.230 回答
1

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

所以这是我的替代方法:

  1. 确保 MSys/MingW 已安装在您的 Windows 上,并且 PATH 环境已设置为它

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

  3. CD 到解压后的 googletest 目录

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

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

  6. 请参阅 googletest 的自述文件,了解如何将其集成libgtest.a到您的系统中。另请参阅googletest wiki中的 googletest Primer ,了解如何编译。或者指定 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();
    }
    
于 2014-06-17T08:53:46.970 回答
1

只要您的路径中有二进制文件,您就不需要复制它们。安装 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
于 2015-02-27T13:50:44.947 回答
0

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

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

Mingw64 8.0.2

GoogleTest GitHub 源代码 repo 分支 1.10.0

CMake 3.20.4

和 Windows10

脚步

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

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

  • 在 Windows 路径环境变量中添加 mingw64/bin 目录名称,例如 C:\Users[USERNAME]\mingw64\bin(将 [USERNAME] 替换为您的用户名,例如 Michael 或 Lee 等)

  • 安装 CMake。这是双击安装程序。确保将其 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-06-23T19:55:40.607 回答