我如何使 gtest 工作

How do I make gtest work

所以我 undefined reference to testing::UnitTest::Run() 和其他一些人一起使用 gtest。我编译了库(libgtest.alibgtest_main.a)并将它们放在我的 MinGW lib 文件夹中,但没有找到。 这是我的 CMakeList.txt:

cmake_minimum_required(VERSION 3.2)
project(proj_tests)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)

include_directories("E:/Git/proj")
include_directories("D:/Development/Libraries/gtest-1.7.0/include")

find_package(gtest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})
add_executable(proj_tests ${SOURCE_FILES} containers/proj_test.h)
target_link_libraries(proj_tests ${GTEST_LIBRARIES} pthread)

我已经 make 对 gtest 样本进行了测试,并且能够 运行 没有任何问题。

我在 Windows 7 上为项目使用 CLion。我怎样才能让这个 Google 测试框架正常工作?

构建gtest时,应该有以下三个文件:

  • include_fused/gtest/gtest.h
  • include_fused/gtest/gtest-all.cc
  • include_fused/gtest/gtest_main.cc

如果您要提供自己的主要内容,则只需要前两个。如果你想使用 gtest main,你还需要第三个。建议将这些添加到您正在构建的每个单元测试项目中。

像这样(这是我的一个图书馆项目的片段)

find_package(GTest REQUIRED)
target_link_libraries(cpputil_test cpputil ${CMAKE_THREAD_LIBS_INIT} ${GTEST_BOTH_LIBRARIES} ${Boost_LIBRARIES} )
add_test(NAME cpputil_test COMMAND cpputil_test)

当然,在我的例子中,该项目称为 cpputil_test。您需要将其替换为您自己的。

另请注意 CMAKE_THREAD_LIBS_INIT 的使用,它允许您的代码跨所有主机系统移植。它在为 linux 构建时隐藏了对 pthreads 的依赖(例如,OSX、iOS 和 Windows 没有这种依赖)。

所以在经历了很多痛苦之后,我切换到 Linux 并通过下载和编译 libgtest-dev 并使用 Erik Smistad 的 blog 的配置尝试了它。它在 CLion 项目中运行没有问题,这意味着我的 Windows 编译的 Google 测试库发生了一些奇怪的事情。

对于windows/MinGW:这是我为Windows..

找到的解决方案
  1. 我从 Richard Pattis 的 UCI webpage 那里获得了关于如何让 google 测试框架在 eclipse 上工作的预编译库。
  2. include 中的 gtest 文件夹已复制到 mingw32\include 文件夹,
  3. 已将 make 文件夹中的 gtest_main.alibgtest.a 文件复制到 mingw32\lib 文件夹。

最终的工作 CMake 配置对我来说是这样的:

cmake_minimum_required(VERSION 3.2)
project(eadlib_tests)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)

#path to project to test
include_directories("E:/Git/eadlib")

#Google test framework stuff
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS})

add_executable(eadlib_tests ${SOURCE_FILES} containers/eadlib_test.h)
target_link_libraries(eadlib_tests ${GTEST_LIBRARIES} pthread)