在linux上使用CMake构建和安装gtest

news2024/11/16 9:27:28

在linux上使用CMake构建和安装gtest

  • 一、准备工作
  • 二、构建并安装gtest的静态库
  • 三、构建并安装gtest的共享库

一、准备工作

本机环境:

  • 系统版本:RHEL 7.6
  • GCC/G++版本: 12.1.1
  • googletest版本:1.12.1

注意,gtest的1.12.x分支是支持C++ 11的最后一个分支,后续分支的最低要求是C++ 14.

以我的RHEL 7.6 为例,系统自带的gcc版本是 4.8, 太老了,必须更新gcc的版本才能正常编译。

关于如何在RHEL上安装最新的gcc/g++编译器并实现不同版本的自由切换,请参考我的另一篇博文:
《编译gtest报错‘is_trivially_copy_constructible’ is not a member of ‘std’》

二、构建并安装gtest的静态库

到一个合适的目录中(本文中是/opt/gtest),执行以下操作:

git clone https://github.com/google/googletest.git -b release-1.12.1
cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build
cmake ..             # Generate native build scripts for GoogleTest.
make
make install         # 注意普通用户需要在前面加sudo,否则会权限不足导致安装失败

可以看到静态库能够成功构建并安装成功,注意默认安装路径是 /usr/local

20230102152724

20230102152957

三、构建并安装gtest的共享库

由于gtest本身比较小巧,所以多数情况下用户为了使用方便,就会直接以静态库的形式对其进行链接,当然了,我们也可以将googletest作为共享库来使用(windows下为dll)。

再次进入build目录, 使用参数 -DBUILD_SHARED_LIBS=ON 进行构建即可:

rm -rf *
cmake -DBUILD_SHARED_LIBS=ON ..
make
make install

20230102153715

查看相关目录可见,此时静态库和共享库已经都有了

20230102153730

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

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

相关文章

基于准则匹配的图像对准

一、概述 在图像处理相关的问题中,图像对准是一类典型的问题,也就是要将两幅图严丝合缝地对应起来。通常来讲,两幅图大小不一,一个是模板,一个是母图,也就是要在母图中搜寻定位到与模板图最为接近的区域。 …

QML教程(七) JavaScript

目录 一、对属性值使用 JavaScript 表达式 二、在 QML 中添加 JavaScript 函数 三、使用 JavaScript 文件 四、属性绑定中的 JavaScript 五、信号处理程序中的 JavaScript 六、将信号连接到 JavaScript 函数 七、启动执行 JavaScript QML 提供的 JavaScript 主机环境可以…

算法学习-并查集(持续更新中)

本文参考: 最容易理解的并查集详解 详解:并查集(Union-Find) 「代码随想录」684. 冗余连接:【并查集基础题目】详解! 并查集从入门到出门 并查集常常在做图相关的题目时冒出来,但是笔者经常去回避这样的解法…

Exynos_4412——轮询与中断

目录 一、CPU与硬件的交互方式 1.1轮询 1.2中断 1.3DMA 二、轮询方式的按键实验 三、GPIO中断相关寄存器 四、GPIO中断编程 五、小作业 一、CPU与硬件的交互方式 1.1轮询 CPU执行程序时不断地询问硬件是否需要其服务,若需要则给予其服务,若不需…

Android Jetpack Compose——一个简单的微信界面

一个简单的微信界面简述效果视频底部导航栏导航元素导航栏放入插槽绘制地图消息列表效果图实现聊天效果图实现气泡背景联系人界面效果图实现好友详情效果图实现发现效果图实现未读红点未读条数朋友圈效果图实现上拉加载个人设置效果图实现个人信息功能区钱包效果图实现切换主题…

【Vue】项目搭建规范

1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 VSCode需要安装一个插件:EditorConfig for VS Code 创建 .editorconfig 文件: # http://editorconfig.orgroot true[*] # 表示所有文…

js Proxy 的使用

文章目录一、什么是Proxy二、语法三、Proxy 方法1、get() 方法2、set() 方法3、apply() 方法4、has() 方法5、construct() 方法6、deleteProperty() 方法一、什么是Proxy Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问&#xff…

[Vulnhub] DC-2

Vlunhub下DC系列靶机第二台,难度与DC-1 差不多,为简单。共有五个Flag 下载地址:Vulnhub:DC-2 目录 信息搜集 cewl爬行网站字典&hydra爆破wordpress用户密码 -rbash逃逸 git提权 信息搜集 nmap -sP 192.168.236.0/24 扫描一下靶机i…

c++语法欠缺地方(持续更新)

sizeof是用来计算变量占多大内存的,单位是字节(byte);sizeof 后面跟类型时,必须加上括号,例如sizeof(double);后面跟变量可以不用加括号,例如:sizeof d %d是以十进制形式输出有符号…

hadoop之kerberos权限配置(ranger基础上)(三)

文章目录一、kerberos服务端二、kerberos客户端三、hadoop集群安装HTTPS服务四、kerberos整合zk五、kerberos整合ranger六、kerberos整合hdfs七、kerberos整合yarn八、kerberos整合hive九、kerberos整合hbase十、遇到的问题一、kerberos服务端 上传kerberos安装包到/opt/rpm 安…

数据库,计算机网络、操作系统刷题笔记22

数据库,计算机网络、操作系统刷题笔记22 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

最值得推荐的3个免费PDF 转换器

当您需要将 PDF 转换为另一种格式(如 Microsoft Word、图像(如 JPG)、Excel、电子书、PowerPoint 等,反之亦然)时,最好的 PDF 转换器非常重要。 但是找到一个可靠的 PDF 转换软件来使用是具有挑战性的。因…

JAVA设计模式--行为型模式--策略模式

1.策略模式(Strategy Pattern) 1.1介绍 一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对…

【C++】网络编程(TCPUDP)

网络编程是C API操作中很重要的一部分,包含TCP和UDP。 网络传输模型可以抽象为7个层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 但在使用TCP/IP协议时,可以简化为这4层:网络接口、网络层、传输层、应用层。…

物理层基本概念

目录物理层的基本概念物理层传输方式串行传输并行传输同步传输异步传输单向通信(单工)双向交替通信(半双工)双向同时通信(全双工)编码与调制常用编码基本调制方法信道极限容量物理层的基本概念 物理层考虑的…

路由 OSPF常见4种网络类型MA、P2P、NBMA、P2MP、OSPF报头字段信息简介。

4.2.1 路由 OSPF(OSPF常见4种网络类型、OSPF报头信息) 目录OSPF常见的4种网络类型广播类型(Broadcast 或 MA)P2PNBMAP2MPOSPF报文发送形式对于不同OSPF网络类型的组网OSPF报头信息实际抓包分析OSPF常见的4种网络类型 OSPF应用于不…

Kali最强渗透工具- metasploit

数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 metasploit是什么? msf是一款开源安全漏洞利用和测试工具,集成了…

C++GUI之wxWidgets(9)-编写应用涉及的类和方法(4)-事件处理(3)

目录动态事件处理如何处理事件事件如何向上传播事件处理程序链动态事件处理 void MyFrameHandler::OnFrameExit(wxCommandEvent&) {// Do something useful. }MyFrameHandler myFrameHandler;MyFrame::MyFrame() {Bind(wxEVT_MENU, &MyFrameHandler::OnFrameExit,&…

Java数组的定义与使用

Java数组的定义与使用 文章目录Java数组的定义与使用数组的基本概念什么是数组数组的创建数组的初始化数组的使用数组中元素访问遍历数组数组是引用类型初始JVM的内存分布基本类型变量与引用类型变量的区别引用变量几道例题认识null数组的应用场景保存数据作为函数的参数参数传…

TypeScript中的泛型

泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。 通常用T来指代任意输入的类型,除了T之外,以下是常见泛型变量代表的意思: K(Key…