CentOS7下编译yaml-cpp库
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。如下图所示:
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,命令如下图所示:
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配置文件,其内容如下:
lastLogin: 2020-09-18 10:17:40
username: root
password: 123
相关C++示例代码demo1.cpp如下:
#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同级目录下执行如下命令:
g++ demo1.cpp -o demo1 -std=c++11 -I/usr/local/include -L/usr/local/lib64 -lyaml-cpp
编译demo1.cpp生成对应的demo1可执行文件 然后运行demo1可执行文件:
./demo1
运行结果如下图所示:
可以重新查看config.yaml文件,发现其中的lastLogin字段被修改成了2020-09-19 11:17:40
五、参考资料
- iOS多线程——你要知道的GCD都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- NSCopying和NSCoding对象序列化反序列化基础详解你要知道的NSCopying、NSCoding协议及对象序列化和反序列化都在这里
- KVO 正确使用姿势进阶及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里
- iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- iOS多线程——你要知道的NSThread都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里
- KVO、Delegate、Notification 区别及相关使用场景你要知道的KVC、KVO、Delegate、Notification都在这里
- Core ML简介及实时目标检测及Caffe TensorFlow coremltools模型转换
- iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里
- BZOJ3585: mex(主席树)
- 01.LoT.UI 前后台通用框架分解系列之——小图片背景全屏显示(可自动切换背景)
- 02.LoT.UI 前后台通用框架分解系列之——灵活的菜单栏
- 05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
- 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
- 07.LoT.UI 前后台通用框架分解系列之——轻巧的文本编辑器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 程序员说模型过拟合的时候,说的是什么?
- 分分钟教会你搭建企业级的 npm 私有仓库
- Golang语言之字符串操作
- Go语言ORM-gorm学习笔记(二)
- TypeScript: 常用的高级类型
- TypeScript:得泛型者,得天下
- 微信PC端多开的秘密
- Spring Cloud 微服务(七)- 上:日志收集集成
- Spring Cloud 微服务(七)- 下:日志收集详解
- Spring Cloud 微服务(八):链路追踪
- 一文带你网络安全 入门到入* [网络安全]
- 小白也能秒懂Vue源码中那些精细设计(选项处理)
- 软件品质评测系统-任务分发管理平台
- 彻底解决小程序无法触发SESSION问题
- 如何搭建前端异常监控系统