我如何使 gtest 工作
How do I make gtest work
所以我 undefined reference to testing::UnitTest::Run()
和其他一些人一起使用 gtest。我编译了库(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)
我已经 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..
找到的解决方案
- 我从 Richard Pattis 的 UCI webpage 那里获得了关于如何让 google 测试框架在 eclipse 上工作的预编译库。
include
中的 gtest
文件夹已复制到 mingw32\include
文件夹,
- 已将
make
文件夹中的 gtest_main.a
和 libgtest.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)
所以我 undefined reference to testing::UnitTest::Run()
和其他一些人一起使用 gtest。我编译了库(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)
我已经 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..
找到的解决方案- 我从 Richard Pattis 的 UCI webpage 那里获得了关于如何让 google 测试框架在 eclipse 上工作的预编译库。
include
中的gtest
文件夹已复制到mingw32\include
文件夹,- 已将
make
文件夹中的gtest_main.a
和libgtest.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)