如何使用mysw与msys在windows上编译googletest?

时间:2011-03-09 15:45:11

标签: c++ windows mingw googletest

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

感谢您的回答。

6 个答案:

答案 0 :(得分:13)

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

为了能够在Windows上编译GoogleTest,请按照以下说明操作:

  1. 我假设你有MinGW和MSYS istalled。

  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 include中。  将库文件“xxx / gtest-x.x.x / * .a”复制到MinGW gcc lib中。

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

  9. 修改 评论员是对的。可执行文件的处理对我有用,但一般来说这不是一个好习惯。请尝试使用symbolic link

答案 1 :(得分:2)

要在没有cmake / python的情况下构建libgtest.a,但只使用mingw make,gtest现在有一个带有普通旧makefile的'make'文件夹。

  1. 确保mingw \ bin在路径中(尝试运行'g ++'或其他东西)。
  2. 输入gtest'googletest \ make'文件夹并运行'make'。
  3. 要测试,请运行'sample1_unittest'(应显示gtest样本测试输出)。
  4. 要生成库'libgtest.a',请运行'ar -rv libgtest.a gtest-all.o'
  5. 创建的库是一个完整的静态库,没有生成dll。

    应该是全部。

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

答案 2 :(得分:2)

来自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}

答案 3 :(得分:1)

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

所以这是我的替代方式:

  1. 确保在Windows上安装了MSys / MingW,并将PATH环境设置为

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

  3. CD到解压缩的googletest目录

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

  5. 致电make - >应该建立libgtest.a。它位于googletest目录lib/.libs子目录

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

  7. 使用ASSERT_DEATH宏检查测试代码中的断言(意味着在您的lib或应用程序中断言,而不是在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();
    }
    

答案 4 :(得分:1)

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

which cmake
which python

如果你看到路径,那么你就有了二进制文件。如果没有,请将它们的路径添加到环境变量&gt; 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

答案 5 :(得分:0)

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

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

Mingw64 8.0.2

GoogleTest GitHUb Source Code repo branch 1.10.0

CMake 3.20.4

和 Windows10

步骤

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

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

  • 在Windows Path Environment中添加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[用户名]\sourcecodes\googletest-master\build\lib]

进入MingW64的lib

<块引用>

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

  • 转到 GoogleTest 提取的存储库,导航到
<块引用>

[例如 C:\Users[用户名]\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)

我希望它会奏效。