![](/img/trans.png)
[英]Trying to Compile Carabiner on windows using Powershell and MinGW MSYS. Having a gflags error in pthreads_rwlock_t
[英]How to compile googletest on windows using mingw with msys?
我的需求很简单。 我必须使用带有 msys 的 MinGW 在 windows 上编译和使用 googletest。 有没有人有这样做的经验?
感谢您的回答。
我花了一些时间,但我想通了。 这是任何面临相同问题的人的指南。
为了能够在 Windows 上编译 GoogleTest,请按照以下说明进行操作:
我假设您已经安装了 MSYS 的 MinGW。
从官方网站http://www.cmake.org/下载并安装 CMake。 使用 Win32 安装程序版本。 完成安装过程后,将可执行文件从“xxx/CMake/bin”复制到“xxx/MinWG/bin”。
从http://www.python.org/下载并安装 Python。 同样,Windows 安装程序可以很好地完成工作。 完成安装过程后,将 python 文件夹中的“python.exe”复制到“xxx/MinWG/bin”。
从http://code.google.com/p/googletest/下载最新的稳定版 GoogleTest 并将其解压到某个文件夹中。
运行 MSYS 终端并执行以下命令。
cd xxx/gtest-xxx cmake -G "MSYS Makefiles" make
如果您有来自 pthread 的编译错误,请按照以下说明进行操作。
将包含文件夹“xxx/gtest-xxx/include”复制到您的 MinGW gcc 包含中。 将库文件“xxx/gtest-xxx/*.a”复制到您的 MinGW gcc 库中。
当您编译测试时,将“-lgtest”参数添加到 gcc。
编辑评论员是对的。 处理可执行文件对我有用,但一般来说这不是一个好习惯。 尝试改用符号链接。
要在没有 cmake/python 的情况下构建 libgtest.a,但仅使用 mingw make,gtest 现在有一个“make”文件夹,其中包含一个普通的旧 makefile。
创建的库是一个完整的静态库,没有生成 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。
所以这是我的替代方法:
确保您的 Windows 上安装了 MSys/MingW 并且设置了 PATH 环境
打开一个 cmd 窗口 - 您也可以在此处显式设置 PATH
CD 到解压后的 googletest 目录
使用 sh(MSys 的一部分)调用 configure: sh configure
应构建调用make
-> libgtest.a
。 它放在你的 googletest-directory lib/.libs
.libs 子目录中
有关如何将libgtest.a
集成到您的系统的信息,请参阅 googletest 的 README。 另请参阅有关如何编译的googletest wiki中的googletest 入门。 或者,指定 gcc -L<googleTestDir>/lib/.libs
的库路径并添加-lgtest
以链接您的测试项目可执行文件。
当使用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 年提出的,同年也回答了得票最多的答案。 因此,新的答案将提高问题的有效性。
您需要的工具和我测试过的:
GoogleTest GitHUb 源代码 repo 分支 1.10.0
和 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]
[例如 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.