本文上接《C++ 测试框架 GoogleTest 初学者入门篇 甲》,欢迎关注微信公众号【ENG八戒】查看更多精彩内容。
安装配置环境
为了更清晰地说明环境配置过程,下面会选择对 Googletest 源码执行编译,然后安装。编译源码时,Googletest 官方手册推荐使用的工具有两种,这里只介绍其中的 Cmake。
linux 平台
我的虚拟机里 Linux 系统是 Ubuntu 18.04,使用 apt 在线直接安装的 cmake 版本最高只能去到 3.10,为了顺利编译最新版的 Googletest 源码,选择安装官网最新版的 cmake。
安装最新版 cmake
# 卸载 cmake
sudo apt purge --auto-remove cmake
# 下载 cmake 安装包,
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
sudo apt update
sudo apt install cmake
下载编译 gtest 开发包
下载安装源码包
sudo apt-get install libgtest-dev
进入源码安装目录,执行编译
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
编译完之后,我看到网上有些教程会推荐直接拷贝库文件(.a到 /usr/lib 目录
sudo cp *.a /usr/lib
不过,我建议是直接用 install 命令,这样库文件和头文件都可以一步部署到位
sudo make install
好了,到这里 ubuntu 下面的 googletest 就安装结束了,你也可用之前的应用样例来验证一下环境是否 OK 。
Windows 平台
我这里安装的版本是
cmake version 3.24.2
CMake suite maintained and supported by Kitware (kitware.com/cmake.
下载编译 googletest 源码包
这里选择 googletest 的最新稳定版源码包,可以去 github 下载,下面贴出我这边实验用的下载链接
下载之后解压到本地文件夹,进到这个本地文件夹,然后启动命令行终端 cmd,当前位置应该是这个本地文件夹,接着按照下面的指令去编译,默认输出静态的调试版本库文件(.lib
mkdir build && cd build
cmake ..
cmake --build .
编译成功后,在目录 .\build\lib\Debug 下面多了很多生成文件,但是我们只需要这两个静态库文件
gtest.lib
gtest_main.lib
那么,怎么输出动态的调试版本库文件(.lib呢?
编译成功后,在目录 .\build\bin\Debug 下面多了很多生成文件,但是我们只要这两个动态库文件
gtest.dll
gtest_main.dll
另外,和编译静态库文件一样,在目录 .\build\lib\Debug 下生成的这两个静态库文件也是需要的,用于链接目标 exe 文件。
gtest.dll
gtest_main.dll
测试工程配置示例
新建一个测试工程 TEST,调用 googletest 库分为静态调用和动态调用,分别对应上一节的两种输出文件,现在就分开来演示一下怎么配置目标测试工程。
调用静态调试库
cmake_minimum_required(VERSION 2.14
project(runTests
# Locate GTest
include_directories(${CMAKE_CURRENT_SOURCE_DIR}
message("CMAKE_CURRENT_SOURCE_DIR:" ${CMAKE_CURRENT_SOURCE_DIR}
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib
# for window static debug
set(CMAKE_CXX_FLAGS_DEBUG "/MTd"
# for window dynamic debug
# set(CMAKE_CXX_FLAGS_DEBUG "/MDd"
# for window dynamic release
# set(CMAKE_CXX_FLAGS_DEBUG "/MD"
# for window static release
# set(CMAKE_CXX_FLAGS_DEBUG "/MT"
# Link runTests with what we want to test and the GTest and pthread library
add_executable(${PROJECT_NAME} main.cpp
target_link_libraries(${PROJECT_NAME}
gtest
gtest_main
Cmake 工程的编译方法都是一样的,照搬上面提到的编译指令即可,这里略过
调用动态调试库
然后看一下 CMakeLists.txt 可以这样写
# for default window dynamic debug
cmake_minimum_required(VERSION 2.14
project(runTests
set(DESTINATION_DIR ${PROJECT_BINARY_DIR}/Debug
execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${DESTINATION_DIR}
execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib/gtest_main.dll ${DESTINATION_DIR}
execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib/gtest.dll ${DESTINATION_DIR}
# Locate GTest
include_directories(${CMAKE_CURRENT_SOURCE_DIR}
message("CMAKE_CURRENT_SOURCE_DIR:" ${CMAKE_CURRENT_SOURCE_DIR}
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/gtest/lib
# Link runTests with what we want to test and the GTest and pthread library
add_executable(${PROJECT_NAME} main.cpp
target_link_libraries(${PROJECT_NAME}
gtest
gtest_main
在 cmake 运行过程中,会把 exe 文件依赖的 googletest 库文件(.dll拷贝到即将生成的 exe 文件的存放位置。
学习可以等,时间不等人!
关注我,带你学习编程领域更多核心技能!