【CMake系列】10-cmake测试集成googletest与第三方库自动化构建
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 这个包,然后提供了两种方式
- github
- 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与第三方库自动化构建的更多相关文章
- 阿里P8大佬熬夜10天,把所有Android第三方库整理成了PDF
缘起 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑.快速迭代的目的越来越难,还有应用之间的互相调用等等问题,插件化技术应用而生.如果没有插件化技术,美团. ...
- 【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在Android开发过程,经常需要用到第三方库以及jar.so.arr文件,那么如何引用到项目中呢?下面简单介绍下. 引用第三方库 ...
- 2. CMake 系列 - 编译多文件项目
目录 1. 编译不使用第三方库的项目 1.1 项目目录结构 1.2 相关代码 1.3 编译 2. 编译使用第三方库的项目 2.1 项目目录结构 2.2 相关代码 2.3 编译 1. 编译不使用第三方库 ...
- 【转载】CMake 简介和 CMake 模板
转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...
- 3. CMake 系列 - 分模块编译&安装项目
目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 测试模块 2.4 顶层 CMakeLists.txt 3. 编译 & 安装 4. 项目安装基本语法 ...
- Springboot系列(七) 集成接口文档swagger,使用,测试
Springboot 配置接口文档swagger 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配 ...
- 4. CMake 系列 - 项目添加编译选项
目录 1. 项目目录结构 2. 相关代码 2.1 add 模块 2.2 sub 模块 2.3 example 模块 2.4 顶层 CMakeLists.txt 3. 配置&编译 1. 项目目录 ...
- 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 ...
- C++ 测试框架 GoogleTest 初学者入门篇 乙
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aFeiOGO-N9O7Ab_8KJ2wxw 开发者虽然主要负责工程 ...
- CMake安装或CMake Error at CMakeLists
CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE ...
随机推荐
- 【动手学深度学习】第五章笔记:层与块、参数管理、自定义层、读写文件、GPU
为了更好的阅读体验,请点击这里 由于本章内容比较少且以后很显然会经常回来翻,因此会写得比较详细. 5.1 层和块 事实证明,研究讨论"比单个层大"但"比整个模型小&quo ...
- 【深度学习 有效炼丹】多GPU使用教程, DP与DDP对比, ray多线程并行处理等 [GPU利用率低的分析]
️ 前言 更新日志: 20220404:新增一个DDP 加载模型时显存分布不均问题,见目录遇到的问题及解决处 主要是上次server12 被自己一个train 直接线程全部拉满了(没错 ... ser ...
- 全志T113-i+玄铁HiFi4开发板(双核ARM Cortex-A7 )规格书
评估板简介 创龙科技TLT113-EVM是一款基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C906 RISC-V + HiFi4 DSP异构多核处理器设计的国产工业评估板,ARM ...
- ELK日志缺失问题排查-多行日志聚合Logstash配置问题
1. 背景 推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程 最近在碰到了几个bad case,需要通过sid来查询推荐日志,但发现部分无法在kiban ...
- 第一个Vert.x程序(基于Gradle7)
这里跑一下Vert.x中文站的入门程序(以后就不写那个点了,或者干脆写vx)简易教程.这个程序非常简单,为啥还写一下呢?因为里面的依赖有点老,已经不能直接成功启动了. 搭建项目 通过IDEA创建Gra ...
- Pluto 轻松构建云应用:开发指南
开发者只需在代码中定义一些变量,Pluto 就能基于这些变量自动创建与管理必要的云资源组件,达到简化部署和管理云基础设施的目的,让开发者更容易使用云. 这里的云资源并非指 IaaS,而是指 BaaS. ...
- 【进阶篇】一文搞清楚网页发起 HTTP 请求调用的完整过程
目录 前言 一.HTTP协议 1.1基本概念 1.2工作原理 二.请求过程 2.1域名解析 2.2TCP 连接 2.3发送 HTTP 请求 2.4服务器应答 2.5响应内容 2.6关闭连接 三.客户端 ...
- Django DRF @action 装饰器
@action 装饰器在Django REST Framework (DRF) 中非常有用,它可以帮助你在ViewSet中创建自定义的动作,而不仅仅是依赖标准的CRUD操作(Create, Read, ...
- [oeasy]python0013_ASCII码表_英文字符编码_键盘字符
ASCII 码表 回忆上次内容 ord(c)和chr(i) 这是俩函数 这俩函数是一对,相反相成的⚖️ ord 通过 字符 找到对应的 数字 chr 通 ...
- 领域驱动设计(DDD)分层架构的三种模式
模式一:四层架构 1.User Interface为用户界面层(或表示层),负责向用户显示信息和解释用户命令.这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人.2.Application为 ...