所以我和gtest的其他人一起得到undefined reference to testing::UnitTest::Run()
。我已经编译了库(libgtest.a
和libgtest_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框架正常工作?
答案 0 :(得分:1)
构建gtest时,应该有以下三个文件:
如果你提供自己的主要,你只需要前两个。如果你想使用gtest main,你也需要第三个。建议将这些添加到您正在构建的每个单元测试项目中。
答案 1 :(得分:1)
因此,在经历了很多伤害之后,我转而使用Linux并通过下载和编译libgtest-dev
并使用Erik Smistad的blog配置来尝试它。它在CLion项目中工作没有问题,这意味着我的Windows编译的Google测试库发生了一些奇怪的事情。
对于windows / MinGW:这是我为Windows提供的解决方案..
gtest
中的include
文件夹已复制到mingw32\include
文件夹,gtest_main.a
文件夹文件中的libgtest.a
和make
个文件已复制到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)
答案 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,没有这种依赖性)。