拉取yaml代码
git clone https://github.com/jbeder/yaml-cpp.git
进行编译
cd yaml-cpp
mkdir build
cd build
cmake ..
make -j16
sudo make install
其中在cmake …时,提示cmake需要3.5以上版本,centos7默认版本较低,那么需要先卸载原来的cmake,并升级。
cmake -version
拉取代码
https://cmake.org/files/v3.5/cmake-3.5.0.tar.gz
tar zxvf cmake-3.5.0.tar.gz
删除原来的cmake
yum remove cmake
开始编译
cd cmake-3.5.0
./configure --prefix=/usr/local/cmake
make && make install
建立连接
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
查看版本
cmake -version
在代码中引入yaml,头文件添加
#include "yaml-cpp/yaml.h"
如果不仅要读取yaml中的内容,还要写入yaml,还需要添加
#include <fstream>
#include <iostream>
在makefile文件中,引入yaml库,-lyaml-cpp。
示例:
#include "yaml-cpp/yaml.h"
#include <fstream>
#include <iostream>
YAML::Node config = YAML::LoadFile("config.yaml");
ofstream fout("config.yaml");//打开写入的输入流
string name = config["name"].as<string>();//读
config["name"] = "Zhao";//写
fout << config;//将config输入到写入流中
fout.close();//关闭写入流,如果不关闭程序结束,则配置文件则为空
yaml冒号后面一定要有一个空格,同级之间对齐,对齐方式要用空格键,不能用tab键。
yaml还能存储结构体,数组等数据结构,如:
#config.yaml
d1:
SdiID: 0
Start: 0
DecFormat: 1920x1080p25
url_str: udp://127.0.0.1:10235
ResetAck: 0
AudioOut: 1
transDelay: 0
FrameSync: 0
RefStart: 0
RefDelay: 0
对它的遍历则是:
.....//伪代码
cmdinfo->SdiID = config["d0"]["SdiID"].as<int>();
cmdinfo->Start = config["d0"]["Start"].as<int>();
cmdinfo->DecFormat = config["d0"]["DecFormat"].as<string>();
cmdinfo->url_str = config["d0"]["url_str"].as<string>();
cmdinfo->ResetAck = config["d0"]["ResetAck"].as<int>();
cmdinfo->AudioOut = config["d0"]["AudioOut"].as<int>();
cmdinfo->transDelay = config["d0"]["transDelay"].as<int>();
cmdinfo->FrameSync = config["d0"]["FrameSync"].as<int>();
cmdinfo->RefStart = config["d0"]["RefStart"].as<int>();
cmdinfo->RefDelay = config["d0"]["RefDelay"].as<int>();
.....