我如何使gtest工作

时间:2015-07-23 15:00:31

标签: c++ cmake googletest clion

所以我和gtest的其他人一起得到undefined reference to testing::UnitTest::Run()。我已经编译了库(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)

我已经对gtest示例做了make,并且能够毫无问题地运行它。

我在Windows 7上使用CLion进行项目。如何让这个Google Test框架正常工作?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

因此,在经历了很多伤害之后,我转而使用Linux并通过下载和编译libgtest-dev并使用Erik Smistad的blog配置来尝试它。它在CLion项目中工作没有问题,这意味着我的Windows编译的Google测试库发生了一些奇怪的事情。

对于windows / MinGW:这是我为Windows提供的解决方案..

  1. 我从Richard Pattis的UCI webpage获得了关于如何让google测试框架在eclipse上工作的预编译库。
  2. gtest中的include文件夹已复制到mingw32\include文件夹,
  3. gtest_main.a文件夹文件中的libgtest.amake个文件已复制到mingw32\lib文件夹。
  4. 最终工作的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)
    

答案 2 :(得分:0)

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

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,没有这种依赖性)。