一、下载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