CentOS7下编译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。如下图所示:

yam-cpp-0.6.0

git clone https://github.com/jbeder/yaml-cpp.git
yaml-cpp

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


yaml-cpp的目录结构

二、下载并安装cmake

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

cmake

cmake_linux

由于是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上面的描述:

Linux下编译yaml-cpp的步骤

下载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
使用cmake编译yaml-cpp

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


make install

至此在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

运行结果如下图所示:


demo1

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


demo1_test2

五、参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342