https://github.com/google/googletest/blob/master/googletest/README.md

构建方法

设置

要构建GoogleTest或者使用它作自己的测试,你需要告诉编译系统去哪里找它的头文件和源文件。具体方式取决于你使用的编译系统。

用CMake编译

GoogleTest 附带了一个CMake构建脚本(CMakeLists.txt)可以在多种平台上使用,如果没有安装CMake,可以从http://www.cmake.org/免费下载。
Cmake通过生成本地mikefiles或者构建项目方式工作,他们可以在你选择的编译环境中使用。你可以将GoogleTest作为一个独立项目构建,也可以将其并入另一个现有项目的CMake中构建。

构建独立CMake项目

当将GoogleTest作为一个独立项目构建时,使用以下命令:

git clone https://github.com/google/googletest.git -b release-1.10.0
cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build
cmake ..             # Generate native build scripts for GoogleTest.

上面的命令默认包含GoogleMock,如果只想构建GoogleTest只须将上面命令的最后一行替换为:

cmake .. -DBUILD_GMOCK=OFF

ps:看一下googletest目录下的CMakeLists.txt就知道,配置BUILD_GMOCK默认为ON,此时会构建googlemock文件加,否则构建googletest文件夹。
如果你在类unix上,此时你可以在当前文件夹(也就是build文件夹)内看到Makefile文件。然后输入make命令构建GoogldTest,再以root身份安装(默认安装在/usr/local文件夹下):

make 
sudo make install  

window和mac不熟(>_<!!!).

并入现有的CMake项目中构建

如果你想在现有的某个用CMake管理的项目中使用GoogleTest,最简单的方法是获得安装的头文件和库文件。

  • 使用find_package(或者pkg_check_modules)倒入GoogleTest。例如:如果find_package(GTest CONFIG REQUIRED) 成功的话,就可以以GTest::gtest或GTest::gmock方式使用GoogleTest。

而一种更加稳健和灵活的方式是将GoogleTest作为该项目的一部分构建。通过使用CMake的add_subdirectory()命令可以将GoogleTest的源代码提供给main build。优点是使用相同的编译器和连接器,避免了GoogleTest和你的项目使用不兼容库的问题。将GoogleTest提供给main build有以下几种方式。

  • 手动下载GoogleTest源码,并将其放到一个已知的位置。这是最不灵活的方法,并且很难和持续的集成系统一起使用(This is the least flexible approach and can make it more difficult to use with continuous integration systems)
  • 将GoogleTest的源码拷贝到主项目的源代码树中。这是最简单的方法,但是最难保持GoogleTest更新。
  • 将GoogleTest作为一个git子模块或等同模块添加到项目中。(本人公司项目管理使用的是svn(>_<!!!))
  • 使用CMake下载GoogleTest作为构建项目的一部分。

上述最后一种方法是用在一个独立文件(例如CMakeLists.txt.in)中的一小段CMake代码实现的。他会被复制到构建区,而后在CMake期间作为一个子构建被调用。这个目录会被add_subdirectory()拉到子构建中被调用。例如:
CMakeLists.txt.in文件内容:

cmake_minimum_required(VERSION 2.8.12)
project(googletest-download NONE)
inlcude(ExternalProject)
ExternalProject_Add(googletest
	GIT_PEPOSITORY		https://github.com/google/googletest.git
	GIT_TAG				master 
	SOURCE_DIR			"${CMAKE_CURRENT_BINARY_DIR}/googletest-src" 
	BINARY_DIR			"${CMAKE_CURRENT_BINARY_DIR}/googletest-build" 
	CONFIGURE_COMMAND	""
	BUILD_COMMAND		""
	INSTALL_COMMAND		""
	TEST_COMMAND		""

现有的CMakeListst.txt:

# Download and unpack googletest at configure time
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
  RESULT_VARIABLE result
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
if(result)
  message(FATAL_ERROR "CMake step for googletest failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
  RESULT_VARIABLE result
  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
if(result)
  message(FATAL_ERROR "Build step for googletest failed: ${result}")
endif()

# Prevent overriding the parent project's compiler/linker
# settings on Windows
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

# Add googletest directly to our build. This defines
# the gtest and gtest_main targets.
add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
                 ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
                 EXCLUDE_FROM_ALL)

# Now simply link against gtest or gtest_main as needed. Eg
add_executable(example example.cpp)
target_link_libraries(example gtest_main)
add_test(NAME example_test COMMAND example)

上面的方式由于使用了ExternalProject_Add()命令,所以需要CMake的版本必须是2.8.2或更后

Visual Studio

pass (对windows开发环境不熟)

C++标准版本

构建GoogleTest需要支持C++11环境,一种方式是在顶层项目中指定C++11,例如使用set(CMAKE_CXX_STANDARD 11)命令。如果这种方式不可行,例如在一个C项目中使用GoogleTest作验证,可以通过添加DCMAKE_CXX_FLAGS选项将其添加到CMake选项中来指定。

调整GoogleTest

GoogleTest可以被用于不同的环境中。但是默认配置在某些环境中可能无法正常工作(或不能很好的工作)。你可以方便的在编译器命令行中定义控制宏,大体上,这些宏的名字类似于GTEST_XYZ然后你可以通过将他们定义成1或0来启用或禁用某个功能。
我们在下面的文件列表中详细列出了这些宏 include/gtest/internal/gtest-port.h

多线程测试

GoogleTest在有pthread库的时候是线程安全的,在#include "gtest/gtest.h"后你可以检测GTEST_IS_THREADSAFE宏看是否是线程安全的(如果是1则是安全的,否则是不安全的)。
如果GoogleTest没有检测到在你的环境下是否是线程安全的,你可以强制设置:

-DGTEST_HAS_PTHREAD=1 

或者

-DGTEST_HAS_PTHREAD=0

当GoogleTest使用pthread的时候你必须在编译器或连接器中选择pthread库,否则会得到连接错。如果你使用的是CMake脚本,这个问题已经被解决了,如果使用的是自己的构建脚本,你必须读你的编译或连接器手册来确定添加什么标志。

作为共享库(DLL)

GoogleTest结构紧凑,所以大多数使用者将其作为静态库进行构建和连接。你也可以将其用作为共享库(Windows称为DLL)
为了将gtest编译为共享库,添加{}到编译器标志。

-DGTEST_CREATE_SHARED_LIBRARY=1

你还需要告诉连接器生成一个共享库-参考连接器手册。
要编译使用gtest共享库的测试,需要添加{}到编译器标志。

-DGTEST_LINKED_AS_SHARED_LIBRARY=1

注意:

避免宏观名冲突

在C++中宏不服从命名空间。因此两个库中同时定义了相同名字的宏,且被同时#include的时候就会命名冲突。如果GoogleTest的宏和其他库的宏命名冲突时你可以重命名GoogleTest的宏,来避免冲突。
具体而言:如果GoogleTest和其他库都定义了FOO宏,你可以添加:

-DGTEST_DONOT_DEFINE_FOO=1

到编译器标志来告诉GoogleTest将FOO宏的名字重新命名成GTEST_FOO.目前FOO可以是SUCCEED,FAIL或者TEST.例如在-DTEST_DONT_DEFINE_TEST=1情况下,为了定义一个test你需要写:

GTEST_TEST(SomeTest, DoesThis) {...}

而非

TEST(SomeTest, DoesThis) {...}
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐