VC2022 + google test

news2025/1/16 6:54:09

还要从项目开始说。

刚来项目组,主体是医疗仪器中位机部分,基本的部署结构:

上位机UI(Ubuntu 18 + java) + 中位机(ARM+Ubuntu 18, C++)  + 下位机(N个下位机子系统,控制步进电机,各种传感器,反射计,大多数基于STM32F407 + RT-thread+C/C++)

现代的C++开发,UT是必不可少的,当前项目开发已经有3年以上,可是UT才刚刚开展,也不知道过往的项目交付流程中,是如何一步一步走过来的,调试纯粹依靠中位机实测,代价很大,也没有gdb,可以想象一路走来是何等是筚路蓝缕。

这也许是蹒跚爬行中众多中小型科技企业的一个非独有的现象,很多现代C++项目交付流程中的烂大街的经验,在部分企业中不一定能够很快用上。

而包含UT的中位机版本,实测中还会包含对真实数据库的修改,因此每次跑完后,可能留下一地鸡毛,记得刚来时,有一个同事的亲身经历,他为了调通一个总是莫名其妙crash又不知道调用栈的case,用了3天,期间疯狂加打印,疯狂各种小修改,这个还算幸运的。

嵌入式开发,通常开发和编译端都是基于Windows+WSL的组合,而代码运行是在ARM芯片上,交叉编译器只能最多支持到C++14版本。

UT的代价不可以如此之高的,编一个版本10分钟,好几个开发用同一台真实机器,很难保证不会互相影响,到最后,积极性很难保证,如何用恰当的工具快乐的开展TDD开发以及小规模重构,让工作多一些快乐,是当务之急的事情。

笔者新加入项目组后,决定必须做一点改进,毕竟简历上写着自己在UT方面称得上很会。

那就基于VC2022开搞。

1 搞定VC下的各种组件的编译(同一套代码,需要适配WIN32+GCC12 + 交叉编译)

2 搞定VC下的google test+ google mock

3 也要协助搞定WSL下的google test+ google mock

即一套代码,最少保证UT可以在三种不同环境上运行。

搞定1后,接下来搞定2,比较麻烦的是VC 2019版本开始默认可以支持google test但是不支持google mock,这个估计是微软方面有私心。

另外一个麻烦事一开始注意到,后来想法设法规避的,那就是项目ARM真实机器上跑的google test版本我居然没有找到完全一样的。

CSDN上有大神已经列出了比较详细的步骤。

这里再次赘述一下

下载googletest-1.14.0版本,确保安装了cmake

powershell 打开,mkdir build & cd build & cmake ../

然后打开build目录下的解决方案

在google test 解决方案这里,比如gmock属性页面

基本上,运行库选MTd(这个很重要,不知道有没有小伙伴用默认的最后也搞定了)

在ALL_BUILD 上面选择生成后,有如下4个库文件

再加上gest+gmock头文件,就得到了一个UT运行的必备组件,归置到某个目录中,笔者当前是和sln文件同级别的目录。

tree命令查看

D:.
├─include
│  ├─gmock
│  │  └─internal
│  │      └─custom
│  └─gtest
│      └─internal
│          └─custom
└─lib

笔者本地的解决方案演示如下,新建EventEngine_ut项目(console控制台,空项目或者控制台应用都可以,不要选静态库动态库之类的)

在EventEngine_ut上打开属性,配置如下

C/C++常规

代码生成的选项里面,仍然是多线程调试/MTd

链接器配置,附加库目录路径填好

输入里面的附加依赖项填好

差不多配置完毕,可以开始您的UT之旅了。

上面只谈到了搞定1 和2, 3的搞定是另外一个故事的。

熟悉CMake的兄弟姐妹可能会鄙视,我们一开始是没有cmake工程的,依靠当前1和2搞定的工程,通过工具cmake convertor导出初版的cmake 工程,然后改造,比较初级。

cmake convertor

后续再拿上来和大家讨论。

接下来一篇,给大家看看另外一个很折腾的,网上也找不到太详细方案的VC2022 + protobuf 配置

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

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

相关文章

免费ChatGPT合集——亲测免费

1、YesChat 无需登录 网址:YesChat-ChatGPT4V Dalle3 Claude 3 All in One Freehttps://www.yeschat.ai/ 2. 讯飞星火 要登录 讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞 3.通义千问 要登录 通义我是通义,一个专门响应人类指令的…

ios不兼容Svg Wave的动画的解决方法

近日也是用上了SvgWave,十分的好看 Svg Wave - A free & beautiful gradient SVG wave Generator. 大家感兴趣的也可以了解一下 【场景】 使用SvgWave的Animate,并生成svg代码使用,windows web端、朋友的安卓移动端都能够正常执行动画…

37.WEB渗透测试-信息收集-企业信息收集(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:36.WEB渗透测试-信息收集-企业信息收集(3)-CSDN博客 关于主域名收…

lt Redis变慢的原因及排查解决方法

前言 Redis 作为优秀的内存数据库,其拥有非常高的性能,单个实例的 OPS 能够达到 10W 左右(5-10W)。但也正因此如此,当我们在使用 Redis 时,如果发现操作延迟变大的情况,就会与我们的预期不符。 你也许或多或少地&…

python基础知识—while和for循环(三)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一:while循环1.1程序的三种执行流程1.2while循环1.3循环变量和死循环 二:for循环2.1for循环2.2range 一&…

【库函数】Linux下动态库.so和静态库.a的生成和使用

目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态…

【jQuery】看一眼就会用的jquery库之续章!

jQuery&#xff08;js框架&#xff09; 17、操作节点 创建节点&#xff1a; 创建节点只需要将元素放在jQuery的工厂函数中//创建一个button按钮let $btn$("<input typebutton>");//创建一个列表项let $li$("<li>选项</li>");添加节点…

【PostgreSQL】Postgres数据库安装、配置、使用DBLink详解

目录 一、技术背景1.1 背景1.2 什么是 DBLink 二、安装配置 DBLink2.1 安装 DBLink2.2 配置 DBLink1. 修改 postgresql.conf2. 修改 pg_hba.conf 三、DBLink 使用3.1 数据准备3.2 DBLink 使用1. 创建 DBLink 连接2. 使用 DBLink 进行查询3. 使用 DBLink 进行增删改4. 使用 DBLi…

鲁棒控制理论学习:静态状态反馈H∞控制器

鲁棒性&#xff0c;即系统的健壮性&#xff0c;是指在异常和危险情况下系统能够维持其功能和性能的能力。在控制系统中&#xff0c;鲁棒性表现为系统在参数摄动下维持某些性能的特性。例如&#xff0c;当控制系统面临输入错误、磁盘故障、网络过载或有意攻击等挑战时&#xff0…

视频质量评价PSNR的两种计算方法

PSNR&#xff08;峰值信噪比&#xff09; 峰值信号的能量与噪声的平均能量之比&#xff0c;本质的是比较两张图像像素值差异&#xff0c;用途较广&#xff0c;目前仍作为对照其他指标的基线。PSNR的单位是dB&#xff0c;数值越大表示失真越小。 mn单色图像 I 和K&#xff0c; …

SpringCloud系列(17)--将服务消费者Consumer注册进Zookeeper

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Zookeeper&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Zookeeper 1、再次创建一个服务提供者模块&#xff0c;命名为consumerzk-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并…

WIFI加密方式对无线速率的影响

文章目录 无线加密三种选择&#xff1a;WEP、WPA和WPA2测试平台和测试方法非加密和WEP加密测试 结果差别巨大非加密条件下 300M无线路由实测WEP加密条件下 300M无线路由实测 TKIP加密算法&#xff1a;WPA与WPA2成绩低迷WPA加密&#xff08;TKIP加密算法&#xff09;条件下 300M…

TypeScript入门第一天,所有类型+基础用法+接口使用

表示逻辑值&#xff1a;true 和 false。在JavaScript和TypeScript里叫做boolean | | 数组类型 | 无 | 声明变量为数组。 // 在元素类型后面加上[] let arr: number[] [1, 2]; // 或者使用数组泛型&#xff0c;Array<元素类型> let arr: Array [1, 2]; | | 元组…

大数据—数据采集DataX

一、DataX介绍 官网&#xff1a; DataX/introduction.md at master alibaba/DataX GitHub DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、…

翻译《The Old New Thing》 - Why .shared sections are a security hole

Why .shared sections are a security hole - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040804-00/?p38253 Raymond Chen 2004年08月04日 许多人会推荐使用共享数据节作为在应用程序的多个实例之间共享数据的一种方式。这听起来是个好…

立即刷新导致请求的response没有来得及加载造成的this request has no response data available

1、前端递归调用后端接口 const startProgress () > {timer.value setInterval(() > {if (progress.value < 100) {time.value--;progress.value Math.ceil(100 / wait_time.value);} else {clearInterval(timer.value);progress.value 0;timer.value null;time.…

pytest-asyncio:协程异步测试案例

简介&#xff1a;pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说&#xff0c;pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略&#xff1a; asyncio并发访问websocket Python&#xff1a;协程 - 快速创…

vscode安装中文插件不生效

在 escode 中&#xff0c;安装了上面的插件&#xff0c;但是界面依然显示的是英文。 解决方案 使用组合键 ctrshiftp&#xff0c;输入 Configure Display Language&#xff0c; 选中 zh-cn&#xff0c;重启

机器视觉3D视觉检测系统的优势

随着科技的飞速发展&#xff0c;机器视觉技术已经成为现代工业生产中不可或缺的一部分。特别是3D视觉检测系统&#xff0c;其优势日益凸显&#xff0c;为各行业的质量控制和生产自动化提供了强大的支持。本文将探讨机器视觉3D视觉检测系统的优势&#xff0c;并分析其在实际应用…

C语言入门课程学习笔记-6

C语言入门课程学习笔记-6 第27课 - 字符数组与字符串&#xff08;上&#xff09;第28课 - 字符数组与字符串&#xff08;下&#xff09;第29课 - 数组专题练习&#xff08;上&#xff09;第30课 - 数组专题练习&#xff08;下&#xff09; 本文学习自狄泰软件学院 唐佐林老师的…