【CMake系列】10-cmake测试集成googletest与第三方库自动化构建

news/2024/10/4 3:31:29

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[])
{// 初始化 gtesttesting::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();
}]=])

然后下载

# 使用fetchcontent 下载安装google test
include(FetchContent)# 下载代码
FetchContent_Declare(googletestGIT_REPOSITORY https://github.com/google/googletest.gitGIT_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_fetchGTest::gtest_main
)

然后 关联googletest

# 联合ctest和gtestinclude(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 buildmessage("tar xf gtest-1.11.0.tar.gz")execute_process(COMMAND ${CMAKE_COMMAND}-E tar xf ${CMAKE_SOURCE_DIR}/gtest-1.11.0.tar.gzWORKING_DIRECTORY ${PROJECT_BINARY_DIR})# cmake 配置  cmake -S . -B buildset(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 ->linuxmessage("${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仓库找到;如有疑问留言或加群咨询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/44486.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【CMake系列】10-cmake测试 ctest

cmake作为一个强大的构建系统指导工具,同时也提供了测试功能,可用于项目的单元测试等,也可以与其他测试框架协作,如googletest,共同完成项目开发中的测试工作,本节我们就来学习 如何借助cmake 完成测试本专栏的实践代码全部放在 github 上,欢迎 star !!! 如有问题,欢迎…

PS2045L-ASEMI低Low VF肖特基PS2045L

PS2045L-ASEMI低Low VF肖特基PS2045L编辑:ll PS2045L-ASEMI低Low VF肖特基PS2045L 型号:PS2045L 品牌:ASEMI 封装:TO-277 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):45V 最大正向电压(VF):0.24V~0.39V 工作温度:-55C~150C 反向恢复时间:5ns 芯片个数…

mybatis-plus加载多个module的mapper踩坑记录

想要多个module中的mapper.xml文件都被加载到,配置文件中mybatis-plus.mapper-locations这一项必须以classpath*:开头,否则就只会加载匹配到的第一个module中的指定目录背景 有一个多模块的项目,每个模块中都有自己的mapper.xml文件。但是在执行一次SQL查询中,mybatis却报出…

Quasar+Electron开发打包为桌面端exe

上一篇博客写了 Quasar+Cordova开发打包移动端app ,今天来写一下Quasar+Electron如何开发打包为桌面端exe。 Electron 英文文档:https://www.electronjs.org/docs/latest/ Electron 中文文档:https://electron.nodejs.cn/ Quasar+Electron文档:https://www.quasar-cn.cn/q…

带你走进信息安全软件架构

经纬恒润车端信息安全解决方案整合了 MCU 端以及 MPU 端的信息安全解决方案,具体方案包括 Security Boot、安全通信、安全存储、安全诊断和入侵检测等,能满足欧标强制法规要求和国内信息安全法规要求,符合欧标出口要求的车载信息安全技术架构。 汽车信息安全逐步受到重…

爬虫 | 防盗链和代理

防盗链referer: 一种反爬方式。一些网站在响应之前会先溯源,检查请求的网址X,是从哪个链接进入的(即上一级网址是谁),比如:通过网址A--->进入网址X,那么上一级就是A。如果发现上一级网址不存在,或者错误,则认为是其他歪门邪道来的,就不给你数据。这个就是防盗链r…

【接口自动化测试框架练习】springboot+react+mysql~极简版postman

可以说是一个toy program,chatgpt完成了一部分工作,我也完成了一部分工作,我俩合作的,我占百分之80%,他百分之20%,哈哈没他不行,源码奉上。https://github.com/Jinwenxin/test-api-frontend 1.功能简介: 分成三部分,如左侧导航栏所示:测试用例管理:测试用例的增删改…

django 的安装和启动

1.pycharm创建project 方法与之前selenium相同 2.app的创建和说明 在项目目录下(与manange.py同级的)的地方 打开终端 在项目目录下输入pyhton manage.py startapp app01(这个是你想给app命名的名字),这样就创建好了app。然后注册app01,找到jango里的settings文件,在INST…