繁体   English   中英

如何使用带有 msys 的 mingw 在 windows 上编译 googletest?

[英]How to compile googletest on windows using mingw with msys?

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

感谢您的回答。

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

为了能够在 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-xxx cmake -G "MSYS Makefiles" make
  6. 如果您有来自 pthread 的编译错误,请按照以下说明进行操作。

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

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

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

要在没有 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,并按照相同的步骤操作。

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

作为替代,也可以使用通常的 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-directory lib/.libs .libs 子目录中

  6. 有关如何将libgtest.a集成到您的系统的信息,请参阅 googletest 的 README。 另请参阅有关如何编译的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(); }

只要您的路径中有二进制文件,您就不需要复制它们。 安装 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

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

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

Mingw64 8.0.2

GoogleTest GitHUb 源代码 repo 分支 1.10.0

CMake 3.20.4

和 Windows10

脚步

  • 双击安装mingw64并选择目录名称之间没有空格的路径,例如“Program Files”

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

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

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

  • 下载 GoogleTest 存储库将其解压缩并在解压缩的目录中创建一个构建目录。

  • 执行以下命令

    $ cd 构建

    $ cmake .. -G "MinGW Makefiles"

    $ mingw32-make.exe

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

[例如:C:\\Users[用户名]\\sourcecodes\\googletest-master\\build\\lib]

进入 MingW64 的库

[例如: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)

我希望它会起作用。

使用 MSYS2,只需安装mingw-w64-x86_64-gtest package:

pacman -S mingw-w64-x86_64-gtest

然后使用标志-lgtest -lgtest_main编译测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM