vs - vs2015编译gtest-v1.12.1
文章目录
- vs - vs2015编译gtest-v1.12.1
- 概述
- 点评
- 笔记
- 将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。
- 编译用的CMake, 优先用VS2019自带的
- 打开VS2015X64本地命令行
- 编译gtest工程
- 测试
- 安装
- 自己写个测试工程,看看编译出来的gTest库是否正确
- 测试工程代码
- 备注
- END
vs - vs2015编译gtest-v1.12.1
概述
前几天,有个同学私信我,问我在不在?
你谁啊,我在不在关你啥事啊? 我们认识么? 我们熟么? 凭啥理你啊? 秒删。
今天碰巧看到他在csdn上留的帖子,大概知道他要解决啥问题了。


他遇到的问题是用VS2015编译gtest1.12.1编译不过。
他提问题的方式有问题。
只说不行(如果行你就不提问题了)。
哪里不行啊?具体啥现象啊?
你具体咋操作的, 引起的不行啊?
就说不行,谁知道哪不行啊?
这样的帖子,除了吃饱了撑的2B, 谁会去回帖?
看到帖子下面,有2个所问非所答的回帖,都不知道这些回帖的人图个啥, 我被帖子双方的行为深深的震撼, 表示看不懂。
有这个垃圾回帖的时间,悠闲的喝口水,安安静静的做个美男子不好么?
大家讨论问题,你要问就好好的问,我如果准备要要回答就好好的回答。
当然你可以好好的问,但是别人可以保留不回答的权利(大家萍水相逢,互不相欠。大家都有自己的事情要做, 没那个时间和心情)。
点评
这样的问题基本不需要问别人,只要开源库官方保证了可以用VS2015编译过,那就是一定能编译过。
那么大个google厂, 不骗工程师的。

如果编译不过,自己换几个CMake版本再试试,没特别的。
这种基础的编译问题,你问别人,大概率不会有人理你的(有质量的回答,垃圾回帖除外)。除非人家不经意的看到,心情还可以,在闲时说2句。
官方文档都说能编译过,为啥你编译不过?
笔记
将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。

确认自己要编译的是gtest1.12.1

编译用的CMake, 优先用VS2019自带的
提取VS2019自带CMake的方法见笔记(vs2019 - 替换vs2019自带的cmake)
只要找到CMake的位置,拷贝出来用就行。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake
我将VS2019的CMake拷贝到磁盘的单独位置,给其他命令行用。

VS2013/VS2015/VS2017是没有内建CMake的。
VS2019的这个CMake版本是 3.20.21032501-MSVC_2 ,不是公版的CMake, 是MS针对VS做了优化适配的版本。
如果用VS2019自带的这个 CMake-3.20.21032501-MSVC_2 可以,就优先用。
如果不行,再尝试自己换公版的CMake。
打开VS2015X64本地命令行

先确认一下,vs2015X64本地命令行是没有CMake的。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cmake --version
'cmake' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
将自己整理的VS2019CMake位置加入path.
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set path=D:\my_dev\devToolSet\CMake_3d2_vs2019\bin;%path%
再确认一下,用的是不是VS2019自带的CMake?
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cmake --version
cmake version 3.20.21032501-MSVC_2CMake suite maintained and supported by Kitware (kitware.com/cmake).
切到gTest库目录
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cd /d D:\3rd_prj\googletestD:\3rd_prj\googletest>
建立构建文件夹my_build
cls && mkdir .\my_build && cd .\my_build
用CMake构建VS2015版的gTest工程
cmake .. -G "Visual Studio 14 2015 Win64"
D:\3rd_prj\googletest\my_build>cmake .. -G "Visual Studio 14 2015 Win64"
-- Selecting Windows SDK version 10.0.14393.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.0.24247.2
-- The CXX compiler identification is MSVC 19.0.24247.2
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Python: C:/Users/chenx/AppData/Local/Programs/Python/Python310/python.exe (found version "3.10.7") found components: Interpreter
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: D:/3rd_prj/googletest/my_buildD:\3rd_prj\googletest\my_build>
构建成功


用VS2015打开构建好的googletest-distribution.sln

选择x64_release

编译gtest工程

编译成功

测试


工程显示没有测试用例。
不管了,只要能编译过,就没问题的,工程品质由开源作者来保证。
安装



将 C:\Program Files\googletest-distribution 目录归档,供自己的工程用。
自己写个测试工程,看看编译出来的gTest库是否正确


工程选为x64_Release,要和gTest库的编译模式匹配,否则编译不过。

在用VS2015编译时,我没有选编译方式,用的默认的。
在测试工程中发现,gTest的releaseX64库选的是/MT,
先将工程改成/MT
等测试通过了,再编译gTest库选项为/MD, 这自己工程的代码产生模式要一致。

编译通过了

测试工程代码
// gTestCaseB.cpp : Defines the entry point for the console application.
//#include "stdafx.h"// gTest工程的Main函数在库中,只需要提供测试用例即可
//int main()
//{
// return 0;
//}// 将gTest的include目录加入编译器选项(c++包含路径)
// D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\googletest-distribution\include// 将gTest的lib目录加入编译器选项(c++库路径)
// 将 D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\googletest-distribution\lib#include "gtest/gtest.h"
#pragma comment(lib, "gtest.lib")
#pragma comment(lib, "gtest_main.lib")TEST(MyTestSuiteA, MyTestCaseA)
{int x = 1;int y = 2;ASSERT_TRUE(3 == (x + y));
}
在cmd中运行 D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\x64\Release\gTestCaseB.exe
C:\Users\me>D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\x64\Release\gTestCaseB.exe
Running main() from D:\3rd_prj\googletest\googletest\src\gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from MyTestSuiteA
[ RUN ] MyTestSuiteA.MyTestCaseA
[ OK ] MyTestSuiteA.MyTestCaseA (0 ms)
[----------] 1 test from MyTestSuiteA (0 ms total)[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[ PASSED ] 1 test.
说明gTest库是可以正常用的。
备注
用CMake默认产生的工程,编译方式中的代码产生方式,可能和自己工程中的不一样。
需要调整为自己工程一致的代码产生方式。

END
相关文章:
vs - vs2015编译gtest-v1.12.1
文章目录 vs - vs2015编译gtest-v1.12.1概述点评笔记将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。编译用的CMake, 优先用VS2019自带的打开VS2015X64本地命令行编译gtest工程测试安装自己写个测试工程,看看编译出来的…...
你好GPT-4o——对GPT-4o发布的思考与看法
你好GPT-4o 前言 2024年5月13日,OpenAI官网发布了他们的新一代自然语言处理交互系统——GPT-4o。这是OpenAI继GPT4之后又一个新的旗舰模型。 GPT-4o(“o”代表“omni”)是迈向更自然的人机交互的一步——它接受文本、音频、图像和视频的任意…...
QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数
三个顾客 Anderson、Bruce、Castiel 都要订饭,分别对应三个按钮,点击一个按钮,就会弹出给该顾客送饭的消息。注意这个例子只使用一个槽函数,而三个顾客名称是不一样的,弹窗时显示的消息不一样,这需要一些 技…...
宝塔nginx配置
将跟php有关的注释掉: 添加: #解决vue刷新404问题try_files $uri $uri/ /index.html; location /prod-api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header…...
容器化实践:DevOps环境下的容器交付流程
DevOps的兴起是为了应对市场和消费者对技术应用的不断增长的需求。它的目标是构建一个更快的开发环境,同时保持软件的高质量标准。DevOps还致力于在敏捷开发周期中提升软件的整体品质。这一目标的实现依赖于多种技术、平台和工具的综合运用。 结合容器化技术与DevO…...
Linux---sudo命令
文章目录 目录 文章目录 一.sudo命令简介 二.sudo 命令的特点 三.sudo 相关文件 四.sudo 命令授权配置 一.sudo命令简介 sudo 命令全称“SuperUser Do”,是Linux系统中的一个命令能够使普通用户以超级用户身份去执行某些命令。 二.sudo 命令的特点 sudo能够授权…...
前后端分离与实现 ajax 异步请求 和动态网页局部生成
前端 <!DOCTYPE html><!-- 来源 --> <!-- https://cloud.tencent.com/developer/article/1705089 --> <!-- https://geek-docs.com/ajax/ajax-questions/19_ajax_javascript_send_json_object_with_ajax.html --> <!-- 配合java后端可以监听 --&…...
Windows系统下CUDA、cuDNN与PyTorch的更新与安装全攻略
Windows系统下CUDA、cuDNN与PyTorch的更新与安装全攻略 文章目录 Windows系统下CUDA、cuDNN与PyTorch的更新与安装全攻略一、引言二、CUDA、cuDNN与PyTorch-GPU介绍三、安装准备1. 查看支持的CUDA版本2. 查看已安装的CUDA版本3. 查看支持的PyTorch版本 四、卸载旧版CUDA五、下载…...
Android Dialog使用汇总
Dialog分类 AlertDialog Dialog 类是对话框的基类,官方建议我们不要直接实例化它,而是使用其子类来获取实例。AlertDialog是系统提供的一个直接子类,它能帮助我们快速构建出不同类型的弹窗。接下来就看下各种类型弹窗的使用。 1、普通对话框…...
[数据集][目标检测]足球场足球运动员身份识别足球裁判员数据集VOC+YOLO格式312张4类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):312 标注数量(xml文件个数):312 标注数量(txt文件个数):312 标注类别…...
学习分享-声明式的 HTTP 客户端OpenFeign
OpenFeign 详细介绍 最近在学习中有用到OpenFeign,也在网上查找了相关资料,做下分享。 一、概述 OpenFeign 是一个声明式的 HTTP 客户端,它使得调用 REST API 变得更加简单和直观。通过 OpenFeign,开发者只需定义接口并添加注解…...
python Tk 获取输入框内容,分割内容
创建输入框、一个按钮和一个标签的GUI。 用户可以在输入框中输入文本,点击按钮后,程序将在控制台打印输入的文本(已经分割为列表),并在GUI中的标签上显示一些静态文本。 import tkinter as tk# 创建主窗口 root tk.…...
第十二章:净世山的终极考验
虽然击败了黑袍人,但四人并未有丝毫的松懈。他们深知,净世山的考验远不止如此。果然,随着黑袍人的倒下,整个山顶开始剧烈震动,仿佛有什么东西即将苏醒。“小心,这山顶似乎有变!”赵无极大声提醒…...
linux常用命令及其选项
1、常用命令 1.1、ls 选项说明-a显示所有文件及目录 (包括隐藏文件)-i显示inode-A同 -a选项 ,但不列出 "." (目前目录) 及 ".." (父目录)-l列出信息详细(如文件型态、权限、拥有者、文件大小等)-R递归显示(若目录下有文件,则以下之…...
虚拟存储器概述
目录 常规存储器管理方式的特征和局部性原理 缺点 局部性原理 局部性原理的应用 1. 提高内存利用率 2. 实现按需装入 3. 支持内存共享 4. 提高系统稳定性 虚拟存储器的定义与特征 虚拟存储器的特征 虚拟存储器的实现机制 虚拟存储器的工作过程 虚拟存储器的优点 虚…...
C++对象池设计与实现
目录 一、对象池简介 1.1 池化技术 1.2 什么是对象池 1.3 对象池分配策略 二、C new和delete运算符重载 三、实现一个对象池框架 3.1 策略接口 四、实现几种对象池的分配策略 4.1 数组策略 4.2 堆策略 编辑 4.3 栈策略 4.4 区块策略 一、对象池简介 1.1 池化技…...
电商系统中热库和冷库的使用与数据转换
在现代电子商务系统中,数据的高效管理和存储是关键。电商平台每日处理海量数据,这些数据不仅包括用户行为、交易记录,还涵盖库存信息、商品详情、物流信息等。为了优化数据存储和查询效率,电商系统通常采用热库(Hot St…...
【LeetCode:312. 戳气球+ 动态规划】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
拉格朗日乘子将不等式约束转化为等式约束例子
拉格朗日乘子将不等式约束转化为等式约束例子 在优化问题中,常常需要将不等式约束转化为等式约束。使用拉格朗日乘子法,可以通过引入松弛变量将不等式约束转换为等式约束,然后构造拉格朗日函数进行求解。 拉格朗日乘子法简介 拉格朗日乘子法是求解带约束优化问题的一种方…...
有效的括号(oj题)
一、题目链接 https://leetcode.cn/problems/valid-parentheses/submissions/538110206 二、题目思路 利用栈的性质,后进先出 1.依次读取字符串,判断是否为左括号,如果是,就将其入栈。 2.如果读取的不是左括号,就说…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
