Ubutu22.04系统安装配置yaml-cpp库
yaml-cpp库是一个开源库,用于C++项目中读取yaml格式的配置文件,其项目地址为:https://github.com/jbeder/yaml-cpp
点击项目地址,可以选择下载为.zip压缩包(yaml-cpp-master.zip)。
安装解压工具:wen:~$ sudo apt-get install unzip
在压缩包所在地址右键选择“在终端打开”
或者按CTRL + ALT + T组合键打开终端,使用cd命令到压缩包所在文件夹下,如压缩包在 /home/wen/packages路径下为:wen:~$ cd packages
解压文件到当前文件目录下:wen:~/packages$ unzip yaml-cpp-master.zip
在解压后的文件夹中创建build文件夹
wen:~/packages$ mkdir build
wen:~/packages$ cd build
wen:~/packages/build$ cmake -DYAML_BUILD_SHARED_LIBS=ON ..
无错误进入下一步
wen:~/packages/build$ make
无错误进入下一步
wen:~/packages/build$ sudo make install
完成后在/usr/local/lib文件目录下可找到 libyaml-cpp.so等文件
在QT项目中使用
在CMakeList.txt中添加相关语句
set(CMAKE_PREFIX_PATH "/usr/local")
set(YAML_DIR ${CMAKE_PREFIX_PATH}/include/yaml-cpp)
set(YAML_SO_DIR ${CMAKE_PREFIX_PATH}/lib)
link_directories(${YAML_SO_DIR})
include_directories(${YAML_DIR})
find_package(yaml-cpp REQUIRED)
include_directories(${YAML_CPP_INCLUDE_DIR})
find_package(PkgConfig)
pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)
在target_link_libraries()中添加
${YAMLCPP_LIBRARIES}
在使用yaml-cpp库的文件中引入头文件
#include "yaml.h"
yaml文件解析
Node有以下几种类型
1、Null空节点
2、Sequence序列,类似于一个Vector,对应YAML格式中的数组
3、Map,类似标准库中的Map,对应YAML格式中的对象
4、Scalar 标量,对应YAML格式中的常量
通过 NodeType 定义了 Node 的可能类型
namespace YAML {
struct NodeType {
enum value { Undefined, Null, Scalar, Sequence, Map };
};
}
各枚举值对应为:0 未定义、1 空、 2 标量、3 序列、4 字典
YAML::Node test1 = YAML::Load("[1,2,3,4]");
cout << " Type: " << test1.Type() << endl;
YAML::Node test2 = YAML::Load("1");
cout << " Type: " << test2.Type() << endl;
YAML::Node test3 = YAML::Load("{'id':1,'degree':'senior'}");
cout << " Type: " << test3.Type() << endl;
结果为:
Type: 3
Type: 2
Type: 4
生成 Node 的形式有很多种,loadFile() 是最常见的一种。
Node LoadFile(const std::string& filename) ,其中filename 就是yaml文件的路径。
有了 Node 之后,所有的信息都可以检索到。比如 name.
cout << “name:” << config[“name”].as() << endl;其中as()表示将解析的内容转换成 string 类型,也可以转换成其它类型。
参考链接:
对YAML::LoadFile的引用未定义
利用 yaml-cpp 开源库读写 yaml 配置文件—— 读写部分