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. .Net Framework使用Autofac实现依赖注入

    .Net Framework使用Autofac实现依赖注入 前言 最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做 ...

  2. hive第二课:Hive3.1.2分区与排序以及分桶(内置函数)

    Hive3.1.2分区与排序(内置函数) 1.Hive分区(十分重要!!) 分区的目的:避免全表扫描,加快查询速度! 在大数据中,最常见的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件 ...

  3. 处理 3d 视频的简单理论基础

    背景 公司产品需要满足一些带有3d功能的应用场景,需要需要懂得如何处理3d信号.之前在调试以前产品的时候,发现处理3d信号的时候,是由2个画面叠加起来的. 导言 3D视频(或3D信号)为什么是两个画面 ...

  4. 在C#中使用RabbitMQ做个简单的发送邮件小项目

    在C#中使用RabbitMQ做个简单的发送邮件小项目 前言 好久没有做项目了,这次做一个发送邮件的小项目.发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方 ...

  5. ubuntu pyinstaller 的安装以及使用

    使用pyinstaller将Python文件打包成linux可执行文件. 安装pip3: sudo apt-get install python3-pip 更换pip3下载源: 1 sudo su 2 ...

  6. Redis常见的16个使用场景

    1.缓存 String类型 例如:热点数据缓存(例如报表.明星出轨),对象缓存.全页缓存.可以提升热点数据的访问数据. 2.数据共享分布式 String 类型,因为 Redis 是分布式的独立服务,可 ...

  7. AJAX基础+Axios快速入门+JSON使用+综合案例

    目录 1. AJAX 1.1 概述 1.1.1 作用 1.1.2 同步和异步 1.2 快速入门 1.2.1 服务端实现 1.2.2 客户端实现 1.3 案例 1.3.1 需求 1.3.2 分析 1.3 ...

  8. 解决方案 | Windows 验证账号出现 0x80190001错误解决

    一.问题描述 点击windows开始→账户→更改账户设置→验证,出现下面的错误. 二.解决方法 网上流行的是这个方法,https://blog.csdn.net/qq_36393978/article ...

  9. CentOS之yum安装JDK

    1.查看云端目前支持安装的jdk版本 [root@localhost ~]# yum search java|grep jdk ldapjdk-javadoc.noarch : Javadoc for ...

  10. oeasy教您玩转vim - 005 - # 程序本质

    ​ 程序本质 回忆上次内容 py 的程序是按照顺序 一行行挨排解释执行的 我们可以 python3 -m pdb hello.py 来对程序调试 调试的目的是去除 bug 别害怕 bug bug 会有 ...