cmake测试,使用ctest 可能不能满足我们的需求,需要我们使用更为强大的第三方测试框架,如googletest,完成项目中的测试工作

本篇文章将第三方测试框架 googletest,引入,同时也可以作为 关于 第三方包 自动化构建的很好示例,值得学习

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

CMake 下载第三方包

我们引入第三方包,一般正常情况下都是从网络下载得到,通常来源有 github,或 其他镜像地址【对网络更加友好】

接下来,我们将介绍如何通过cmake 完成这一下载操作

首先用cmake file 给出测试文件

file(WRITE gtest_fetch.cpp [=[

#include <gtest/gtest.h>

TEST(MyTest, MyTestDownload)
{
EXPECT_EQ(7*6,42);
} TEST(MyTest, MyTestUpload)
{
EXPECT_EQ(7*6,1);
} int main(int argc,char* argv[])
{
// 初始化 gtest
testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
} ]=])

然后下载

# 使用fetchcontent 下载安装google test
include(FetchContent) # 下载代码
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.12.1
) # cdn
# FetchContent_Declare(
# googletest
# URL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz
# )

使用cmake下载,需要用到FetchContent 这个包,然后提供了两种方式

  1. github
  2. cdn url

通过上面的动作,我们可以将网络上的包下载到本地

cmake 也针对下载的包 提供了半自动化的 构建过程

# 编译安装
FetchContent_MakeAvailable(googletest)

然后我们需要去 构建 这个第三方包

cmake -B build -S .
cmake --build build # 这个过程中 同时 完成 googletest 的构建
cmake --install build --prefix=./ --config Debug # linux 不需要 --config Debug

然后到此为止 我们就安装完成,可以添加我们的目标

add_executable(gtest_fetch gtest_fetch.cpp)

# 设置gtest 库 头文件自动推导
target_link_libraries(
gtest_fetch
GTest::gtest_main
)

然后 关联googletest

# 联合ctest和gtest

include(GoogleTest)
gtest_discover_tests(gtest_fetch) # 打开才能运行ctest
enable_testing()

执行 ctest 运行结果如下



执行 googletest 运行结果如下

自动化构建

这里自动化构建,也就是 构建第三方过程中 不需要 我们再手工输入指令,而是让cmake 让我们自动执行

也就是让这几个命令实现自动化

cmake -B build -S .
cmake --build build # 这个过程中 同时 完成 googletest 的构建
cmake --install build --prefix=./ --config Debug # linux 不需要 --config Debug

这里给出核心代码

# cmake -E 执行shell
# PROJECT_BINARY_DIR -B build
message("tar xf gtest-1.11.0.tar.gz")
execute_process(COMMAND ${CMAKE_COMMAND}
-E tar xf ${CMAKE_SOURCE_DIR}/gtest-1.11.0.tar.gz
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
) # cmake 配置 cmake -S . -B build
set(GTEST_SOURCE "${PROJECT_BINARY_DIR}/googletest-release-1.11.0")
message("${CMAKE_COMMAND} -S ${GTEST_SOURCE} -B ${GTEST_SOURCE}/build") execute_process(COMMAND ${CMAKE_COMMAND}
-S ${GTEST_SOURCE} -B ${GTEST_SOURCE}/build
) # 3 编译gtest ->linux
message("${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build")
execute_process(COMMAND ${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build) # 安装 message("${CMAKE_COMMAND} --install ${GTEST_SOURCE}/build --prefix=${GTEST_PATH}")
execute_process(COMMAND ${CMAKE_COMMAND} --install ${GTEST_SOURCE}/build
--prefix=${GTEST_PATH} --config Debug
)

更详细部分,可以去github仓库找到;如有疑问留言或加群咨询。

【CMake系列】10-cmake测试集成googletest与第三方库自动化构建的更多相关文章

  1. 阿里P8大佬熬夜10天,把所有Android第三方库整理成了PDF

    缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化技术,美团. ...

  2. 【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在Android开发过程,经常需要用到第三方库以及jar.so.arr文件,那么如何引用到项目中呢?下面简单介绍下. 引用第三方库 ...

  3. 2. CMake 系列 - 编译多文件项目

    目录 1. 编译不使用第三方库的项目 1.1 项目目录结构 1.2 相关代码 1.3 编译 2. 编译使用第三方库的项目 2.1 项目目录结构 2.2 相关代码 2.3 编译 1. 编译不使用第三方库 ...

  4. 【转载】CMake 简介和 CMake 模板

    转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...

  5. 3. CMake 系列 - 分模块编译&安装项目

    目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 测试模块 2.4 顶层 CMakeLists.txt 3. 编译 & 安装 4. 项目安装基本语法 ...

  6. Springboot系列(七) 集成接口文档swagger,使用,测试

    Springboot 配置接口文档swagger 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配 ...

  7. 4. CMake 系列 - 项目添加编译选项

    目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 example 模块 2.4 顶层 CMakeLists.txt 3. 配置&编译 1. 项目目录 ...

  8. Windows 10上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on windows from source

    本文首发于个人博客https://kezunlin.me/post/bb64e398/,欢迎阅读! compile glog v0.3.5 and glags on windows from sour ...

  9. C++ 测试框架 GoogleTest 初学者入门篇 乙

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aFeiOGO-N9O7Ab_8KJ2wxw 开发者虽然主要负责工程 ...

  10. CMake安装或CMake Error at CMakeLists

    CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE ...

随机推荐

  1. 【vue】利用输入框搜索过滤来选择列表

    方法1 <div id="app"> <input type="text" @input="handleInput()" ...

  2. 记一次 .NET某网络边缘计算系统 卡死分析

    一:背景 1. 讲故事 早就听说过有什么 网络边缘计算,这次还真给遇到了,有点意思,问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心 ...

  3. Log4Net配置详解及输出自定义消息类示例

    1.简单使用实例 1.1 添加log4net.dll的引用.   在NuGet程序包中搜索log4net并添加,此次我所用版本为2.0.17.如下图: 1.2 添加配置文件   右键项目,添加新建项, ...

  4. ubuntu20 python2 通过安装包安装mysql-python

    前言 众里寻他千百度,蓦然回首,那人却在灯火阑珊处. 最近要测试一个python2环境的代码,其中用到了MySQLdb, 查询网络,发现要安装mysql-python,于是就进行了一番艰难的探索,现在 ...

  5. Codeforces Round 935 (Div. 3)

    A. Setting up Camp 题目描述 The organizing committee plans to take the participants of the Olympiad on a ...

  6. HOOK别人的dylib(HOOK cydia里面的插件)

    以下仅做我在hook 中的记录, 环境 VM PRO 15 MAC OS 15 Xcode 11.2 工具 monkeydev install_name_tool otool 思路:将要hook 的d ...

  7. nginx负载均衡session共享解决方案

    解决方案: 1.使用客户端的cookie作为存放登录信息的媒介 cookie是将用户登录信息存储在用户终端的数据载体,与session的最大区别就是,session是存储在服务器端的:所以这就很容易解 ...

  8. 2023/4/20 SCRUM个人博客

    1.我昨天的任务 学习了PYQT5的部分控件,例如按钮,文本框,文本编辑框,并了解了一些基础布局以及部分对窗口的自定义实现 2.遇到了什么困难 无法理解信号和槽的概念 3.我今天的任务 学习信号和槽的 ...

  9. 关于SpringCloud Bus RemoteApplicationEvent 使用注意事项

    最近使用SpringCloud Bus 用于服务直接消息通信,遇到一些问题,记录下来给一样碰到问题的你一个解决方案 开发环境 : springboot 2.3.9.RELEASE spring-clo ...

  10. Vue cil路由如何回到初始状态

    前景:我们在网页里进入路由的地址后,会发现地址栏中会加上我们的路由地址,这样我就知道当前在哪个位置.但是这样子我们如何手动刷新浏览器,想要浏览器回到根路径的话,是无法直接回去的,因为地址没有更改.再怎 ...