1. 什么是动态安装
目标是用cmake建立一个googletest项目,但是本机并没有安装googletest库,或者要将项目分享给其他人,无法保证其他人电脑上装有googletest。这种情况可以有两种方式解决:
- 将googletest的库和头文件与test工程维护在一起
- 在测试工程的CMakeLists.txt中下载并“引建”googletest的工程,编译测试项目的时候将要依赖的googletest库一起编译出来
我们将第二种解决方案称为动态使用googletest
2. 方法参考
参考资料,本文中使用的方法借鉴于此文章。
3. 让CMake做所有工作
- 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 ""
)
- 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()
- copy 下边的内容,另存为utest.cpp
#include "gtest/gtest.h"
TEST(TestSuiteName, TestName) {
EXPECT_EQ(1, 1);
}
- 目录结构如下,bin为空目录
-|
|_bin
|_CMakeLists.txt.in
|_CMakeLists.txt
测试
- 在bin目录下运行
cmake ..
- 打开bin目录下的visual studio 项目,并编译
- 打开Test>Test Explor,执行所有test