【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 ...
随机推荐
- Java常用的十大开源工具类库总结
以下是个人总结的Java常用的十大开源工具类库,根据具体需求和项目,可以选择合适的工具类库来提高开发效率.1. Apache Commons:Apache Commons是一个开源的工具类库,提供了大 ...
- Nuxt3 的生命周期和钩子函数(一)
title: Nuxt3 的生命周期和钩子函数(一) date: 2024/6/25 updated: 2024/6/25 author: cmdragon excerpt: 摘要:本文是关于Nuxt ...
- Kubernetes(五) Pod控制器详解
Pod控制器详解 本章主要介绍Pod控制器的详细使用 1. Pod控制器介绍 在kubernetes中,按照pod的创建方式可以将其分为2类: 自主式pod:kubernetes直接创建出来的pod, ...
- 3568F-物联网模块开发案例
- 创龙科技位居头版,2023深圳elexcon电子展为智能化赋能!
紧跟前沿技术应用及市场发展热点,elexcon2023聚焦三大展示板块:"嵌入式与AIoT展""电源与储能展""SiP与先进封装展",吸引了 ...
- SpringBoot获取指定Resource下的文件内容
加入依赖 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...
- Java JVM——12. 垃圾回收理论概述
1.前言 1.1 什么是垃圾? 在提到什么是垃圾之前,我们先看下面一张图: 从上图我们可以很明确的知道,Java 和 C++ 语言的区别,就在于垃圾收集技术和内存动态分配上,C++ 语言没有垃圾收集技 ...
- 使用forEach循环异步方法,导致使用深拷贝时,得不到最新数据,控制台会打印出最新的数据
在使用forEach循环遍历一个数组,如果循环时有异步方法,会导致最终深拷贝得不到最新数据,但是控制台会打印最新的数据 `const arr = [ { name: "Jone", ...
- PHP 程序员为什么依然是外包公司的香饽饽?
大家好,我是码农先森. PHP 唯一的爽点就是开发起来「哇真快」这刚好和外包公司的需求相契合,在 Web 领域的芒荒年代 PHP 以王者姿态傲视群雄.如果 PHP 敢说第二,就没有哪门子语言敢称第一, ...
- 【服务器】Ubuntu虚拟内存设置
引子 最近服务器内存老是爆掉,64G的内存对于四五个人同时使用还是有点勉强,上网查询了一下虚拟内存的教程,本博客记录一下方法. swap内存设置 假设你想将swap文件放在/mnt/data/mem目 ...