前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CentOS7下编译yaml-cpp库

CentOS7下编译yaml-cpp库

作者头像
ccf19881030
发布于 2020-09-21 10:07:47
发布于 2020-09-21 10:07:47
3.1K00
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

CentOS7下编译yaml-cpp

  • 一、下载[yaml-cpp](https://github.com/jbeder/yaml-cpp)源代码
  • 二、下载并安装cmake
  • 三、使用cmake编译yaml-cpp
  • 四、测试使用yaml-cpp
  • 五、参考资料

一、下载yaml-cpp源代码

yml文件和yaml文件是目前比较常用的配置文件,Java中的SpringBoot的application.yml配置使用的就是这种格式,另外诸如nodejs和g欧登语法对于yaml文件都有很好的支持。 yaml-cpp是一个yaml配置文件的C++解析库,其下载地址为:https://github.com/jbeder/yaml-cpp 在Windows10中使用VS2017编译yaml-cpp库前,需要去Github上面下载对应的yaml-cpp源代码。目前的yaml-cpp最新版本是yaml-cpp-0.6.0。如下图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/jbeder/yaml-cpp.git

我在Windows10中下载好yaml-cpp源代码将其放在相应的目录下,最后下载的文件目录结构如下图所示:

二、下载并安装cmake

去官网https://cmake.org/download/

由于是CentOS所以选择对应的Linux源代码cmake-3.18.2.tar.gz或者对应的cmake-3.18.2-Linux-x86_64.tar.gz源代码以及编译脚本cmake-3.18.2-Linux-x86_64.sh 下载到对应的目录下执行cmake-3.18.2-Linux-x86_64.sh脚本安装cmake即可。另外需要配置好cmake的环境变量,将cmake命令加到系统的环境变量种。

三、使用cmake编译yaml-cpp

在CentOS7等Linux发行版下编译yaml-cpp是非常简单的,可以参考github上面的描述:

下载yaml-cpp源代码,并且安装好了cmake之后(我安装的cmake版本是cmake 3.16.2),开始编译yaml-cpp,命令如下图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
cd yaml-cpp
mkdir build
cmake .. -DYAML_BUILD_SHARED_LIBS=ON
make
make install

编译安装好yaml-cpp库后会在build目录生成libyaml-cpp.so.0.6.3动态库以及yaml-cpp.pc等文件,可以从yaml-cpp.pc文件中看出yaml-cpp库默认的安装路径为:/usr/local目录,头文件安装路径为:/usr/local/include,库文件安装路径为:/usr/local/lib64

至此在CentOS7下成功编译生成了yaml-cpp的lib动态库,并且安装到/usr/local目录下,可以使用yaml-cpp进行yaml或yml的解析和测试了。

四、测试使用yaml-cpp

首先在编写代码前,写一个config.yaml配置文件,其内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lastLogin: 2020-09-18 10:17:40
username: root
password: 123

相关C++示例代码demo1.cpp如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #include <yaml-cpp/yaml.h>
 #include <iostream>
 #include <string>
 #include <fstream>
 using std::cout;
 using std::endl;
 
 int main(int argc, char* argv[])
 {
     YAML::Node config = YAML::LoadFile("config.yaml");
  
     if (config["lastLogin"]) {
          std::cout << "Last logged in: " << config["lastLogin"].as<std::string>() << std::endl;
     }
  
     const std::string username = config["username"].as<std::string>();
     const std::string password = config["password"].as<std::string>();
     config["lastLogin"] = "2020-09-19 11:17:40";
  
     std::ofstream fout("config.yaml");
     fout << config;
  
     return 0;
 }

编译并运行demo程序, 在demo1.cpp和config.yaml同级目录下执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g++ demo1.cpp -o demo1 -std=c++11 -I/usr/local/include -L/usr/local/lib64 -lyaml-cpp

编译demo1.cpp生成对应的demo1可执行文件 然后运行demo1可执行文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./demo1

运行结果如下图所示:

可以重新查看config.yaml文件,发现其中的lastLogin字段被修改成了2020-09-19 11:17:40

五、参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
viper 源码分析
Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序。它旨在在应用程序中工作,并可以处理所有类型的配置需求和格式。它支持:
golangLeetcode
2022/08/02
1.1K0
Go之Viper
Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式;
iginkgo18
2021/04/23
6.6K1
Go每日一库之6:viper
上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库。
luckpunk
2023/09/13
3660
go库介绍:Golang中的Viper库
在Golang(Go)的开发中,配置管理是一个不可或缺的部分。一个优雅的配置管理方案不仅能够简化应用程序的配置处理流程,还能提高应用程序的灵活性和可维护性。在这方面,Viper库无疑是Go生态系统中的一颗璀璨明珠。本文将详细介绍Viper库及其使用场景,并通过具体示例展示其强大功能。
每周聚焦
2024/11/08
5460
go库介绍:Golang中的Viper库
go语言中的配置管理神器 --viper 一
Viper 是 Go 应用程序的完整配置解决方案,包括 12-Factor 应用程序。它旨在在应用程序中工作,并可以处理所有类型的配置需求和格式。它支持:
onenewcode
2024/02/02
3850
Go viper 配置文件读取工具
viper 提供默认 Viper对象, 可直接使用。 也通过 New 方法创建自定义Viper
copy_left
2020/08/11
1.9K0
Golang-配置管理Viper
Viper 是一个完整的 Go 应用程序配置解决方案,优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下:
小许code
2023/02/09
1.1K0
Golang-配置管理Viper
手把手,带你从零封装Gin框架(二):配置初始化 & 全局变量
配置文件是每个项目必不可少的部分,用来保存应用基本数据、数据库配置等信息,避免要修改一个配置项需要到处找的尴尬。这里我使用 viper 作为配置管理方案,它支持 JSON、TOML、YAML、HCL、envfile、Java properties 等多种格式的配置文件,并且能够监听配置文件的修改,进行热重载,详细介绍大家可以去官方文档查看
用户10002156
2024/01/08
2.3K0
手把手,带你从零封装Gin框架(二):配置初始化 & 全局变量
基于 Go 语言开发在线论坛增补篇:通过 Viper 读取配置文件并实现热加载
之前我们在论坛项目中使用了单例模式全局加载配置文件,这样做有一个弊端,就是不支持热加载,每次修改配置文件,需要重启应用,不太灵活,所以这篇教程我们引入 Viper 重构配置读取逻辑,并支持配置文件的热加载(所谓热加载指的是配置文件修改后无需重启应用即可生效)。
学院君
2020/05/07
2K0
Golang生态:使用viper管理配置
通过配置,我们可以动态地改变程序的行为,常用的方式包括配置文件,命令行参数,环境变量等。我原来一直很欣赏ssh的配置管理方式:
王录华
2019/11/19
5K1
Go语言微服务框架 - 2.实现加载静态配置文件
首先,我们要正确地认识到配置文件的重要性:在程序交付后,变更代码的成本很大;相对而言,变更配置文件的成本就比较小。但有的同学又走了另一个极端,也就是将大量的逻辑放入到配置文件中,导致配置文件膨胀,本质上就是将部分本应在代码中维护的内容转移到了配置文件,导致配置文件也很难维护。
junedayday
2021/09/24
1.3K0
Viper,一个Go语言配置管理神器!
文章链接:https://cloud.tencent.com/developer/article/2466037
南山竹
2024/11/16
1160
Viper,一个Go语言配置管理神器!
使用Viper读取Nacos配置(开源)
目前Viper支持的Remote远程读取配置如 etcd, consul;目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持库, 开源地址在文章的最下方. 实现这个仓库的主要目的是为了,最终集成到我们的yoyogo框架中。
yoyofx
2021/05/06
2.3K0
go语言中的配置管理神器 --viper 二 实战
onenewcode
2024/02/04
2140
go-viper 配置文件框架
看了一些开源项目,很多都会使用viper这个配置文件框架,然后了解了一番,做一下输出。 下面这些内容摘自官方github,官方的示例比较粗糙,下面稍加改动改动了一下写了几个示例。 实际这个框架写的简单好用。
潇洒
2023/10/23
3180
Go 语言 viper 库上手实践
在软件开发当中,不可避免需要将配置信息存放于配置文件当中。在 Java 项目当中,Spring 提供了非常强大的配置文件管理能力,这里就不多说了。今天分享一下 Go 语言中的配置文件管理类——viper。
FunTester
2025/01/23
1400
Go 语言 viper 库上手实践
Go:配置文件解析库 spf13/viper简介(Go应用程序的完整配置解决方案)
在我们开发过程中,像数据库信息、邮件配置和其他的第三方服务密钥等这些固定的信息都会写在配置文件中,而配置文件又有多种表现形式和格式,有 JSON, TOML, YAML各种格式,而且测试环境,开发环境和生产环境用的配置文件也不是同一份。
Freedom123
2024/03/29
6380
Go中级之手把手教你开发一个简易的个人博客网站(二)项目配置独立化
此文是个人学习归纳的记录,腾讯云独家发布,未经允许,严禁转载,如有不对, 还望斧正, 感谢!
言志志
2023/12/24
8841
Go中级之手把手教你开发一个简易的个人博客网站(二)项目配置独立化
组件分享之后端组件——Golang的配置文件管理组件viper
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。
cn華少
2022/04/24
3200
使用Viper处理Go应用程序的配置
在开发Go应用程序时,处理配置是一个常见的需求。配置可能来自于配置文件、环境变量、命令行参数等等。Viper是一个强大的库,可以帮助我们处理这些配置。
孟斯特
2023/09/24
2970
使用Viper处理Go应用程序的配置
相关推荐
viper 源码分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档