首页 > 其他分享 >【CMake系列】10-cmake测试集成googletest与第三方库自动化构建

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

时间:2024-06-12 13:46:38浏览次数:16  
标签:10 cmake -- gtest googletest COMMAND build CMake

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仓库找到;如有疑问留言或加群咨询。

标签:10,cmake,--,gtest,googletest,COMMAND,build,CMake
From: https://www.cnblogs.com/caibucai/p/18243783

相关文章

  • 【CMake系列】10-cmake测试 ctest
    cmake作为一个强大的构建系统指导工具,同时也提供了测试功能,可用于项目的单元测试等,也可以与其他测试框架协作,如googletest,共同完成项目开发中的测试工作,本节我们就来学习如何借助cmake完成测试本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、或加群【392......
  • 【CMake系列】09-cmake install 一般文件 文件夹 代码文件
    上一节,我们学习了项目构建后、目标的安装,本节学习的内容是对于一般文件,文件夹以及源代码的安装本节的文件依然使用file(WRITExxx.xx)来创建,不依赖额外的文件本专栏的实践代码全部放在github上,欢迎star!!!如有问题,欢迎留言、或加群【392784757】交流文件安装CMakeLi......
  • 一个串行程序,94%的执行时间花费在一个可以并行化的函数中。现使其并行化,问该并行程序
    经测试发现,1)一个串行程序,94%的执行时间花费在一个可以并行化的函数中。现使其并行化,问该并行程序在10个处理机上执行所能达到的加速比是多少?能达到的最大加速比是多少?2)一个并行程序,在单个处理机上执行,6%的时间花费在一个I/O函数中,问要达到加速比10,至少需要多少个处理机?......
  • 【平头哥开源CPU——玄铁C910】开源项目库配置和前仿真记录
    C910开源项目库配置C910开源项目库中有很多问题,比如我做到makecompile的时候一直在报错无法找到工程下的某个文件,主要原因是平头哥官方提供的环境变量配置文件类型是.csh的,而我的linux工作站里没有csh而且没有联网。所以把csh文件内容做了修改也成功跑通了,现在分享一下。......
  • LeetCode刷题之HOT100之单词搜索
    2024/6/12这两天天气只能用闷、潮、热来描述。整个人像被罩在为了饭菜保温的盖子里,喘气困难、粘稠的空气一次又一次打湿我。唯有空调救我,夏天来了。Anyway,昨天只做了一题,今天早点来做一题。1、题目描述2、逻辑分析给定一个二维字符矩阵和一个单词,求单词是否在这个二维......
  • 100个常用Shell使用命令详解
    转载自公众号:一口Linux 在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。无论是新手还是专业人士,掌握Shell命令都是必不可少的技能。本文逐个解读和展示Sh......
  • 备件FM910,FM920工控模块
    备件FM910,FM920工控模块。通常与步进电机或者伺服电机配使用构成闭环或者半闭环的控制系统。2.4接近开关:备件FM910,FM920工控模块。接近开关是一种无需与运动部件进行机械直接接触而可以操作的位置开关,接近开关也是依据电磁感应的原理设计制造的,备件FM910,FM920工控模块。所以......
  • 10 种超赞的 MyBatis 写法!
    https://mp.weixin.qq.com/s/U3m2iLfujYLy5T-B2OI3ZA MyBatis虽说给我们的开发带来了很多的便捷,但有些地方写起来依旧比较的麻烦,比如配置XML的时候,但是一个好的写法,不仅能为我们节省不少时间、还能能降低出错的概率,下面就给大家分享一些优质的写法: 1、用来循环容器的标签fo......
  • 代码随想录算法训练营第第35天 | 977.有序数组的平方1005.K次取反后最大化的数组和 、
    1005.K次取反后最大化的数组和本题简单一些,估计大家不用想着贪心,用自己直觉也会有思路。https://programmercarl.com/1005.K次取反后最大化的数组和.html自己写的时间复杂度太高,看答案优化/***@param{number[]}nums*@param{number}k*@return{number}*/varl......
  • 6.10
    实验项目名称:实验三  Web数据库程序设计一、实验目的通过使用JSP技术设计一个简单的数据库管理系统,了解展示页面和编辑页面的区别,掌握Web服务器与MySQL数据库的连接和数据库操作的方法,掌握使用Java语言编写JSP文件的方法。二、实验内容和基本要求从以下列举的四个数据库中,任......