cmake 中动态使用googletest

1. 什么是动态安装

目标是用cmake建立一个googletest项目,但是本机并没有安装googletest库,或者要将项目分享给其他人,无法保证其他人电脑上装有googletest。这种情况可以有两种方式解决:

  • 将googletest的库和头文件与test工程维护在一起
  • 在测试工程的CMakeLists.txt中下载并“引建”googletest的工程,编译测试项目的时候将要依赖的googletest库一起编译出来

我们将第二种解决方案称为动态使用googletest

2. 方法参考

参考资料,本文中使用的方法借鉴于此文章。

3. 让CMake做所有工作

  1. copy下边的内容,并另存为CMakeLists.txt.in
cmake_minimum_required(VERSION 2.8.2)
project(googletest-download NONE)

include(ExternalProject)
ExternalProject_Add(googletest
    GIT_REPOSITORY https://github.com/google/googletest.git
    GIT_TAG master
    SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
    BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    TEST_COMMAND ""
)
  1. copy下边的内容,另存为CMakeLists.txt
cmake_minimum_required(VERSION 2.8.9)
project(utest)
# Download and unpack googletest at configure time
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download"
)
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/googletest-download"
)

# Prevent GoogleTest from overriding our compiler/linker options
# when building with Visual Studio
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

# Add googletest directly to our build. This adds the following targets:
# gtest, gtest_main, gmock and gmock_main
add_subdirectory("${CMAKE_BINARY_DIR}/googletest-src"
                 "${CMAKE_BINARY_DIR}/googletest-build"
)

# The gtest/gmock targets carry header search path dependencies
# automatically when using CMake 2.8.11 or later. Otherwise we
# have to add them here ourselves.
if(CMAKE_VERSION VERSION_LESS 2.8.11)
    include_directories("${gtest_SOURCE_DIR}/include"
                        "${gmock_SOURCE_DIR}/include"
    )
endif()

add_executable(utest utest.cpp)
target_link_libraries(utest gtest gtest_main)
enable_testing()
  1. copy 下边的内容,另存为utest.cpp
#include "gtest/gtest.h"
TEST(TestSuiteName, TestName) {
    EXPECT_EQ(1, 1);
}
  1. 目录结构如下,bin为空目录
-|
 |_bin
 |_CMakeLists.txt.in
 |_CMakeLists.txt

测试

  1. 在bin目录下运行 cmake ..
    在这里插入图片描述
  2. 打开bin目录下的visual studio 项目,并编译
  3. 打开Test>Test Explor,执行所有test
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/iceboy314159/article/details/105741654