利用 yaml-cpp 开源库读写 yaml 配置文件—— yaml-cpp安装配置
说明
本文介绍的是如何在 C++ 开发中利用 yaml-cpp 开源库读写 yaml 配置文件。
主要参考了网上的大牛们的文章,这里只是做简单记录。
YAML简介
YAML语言的设计目标,就是方便人类读写,实质上是一种通用的数据串行化格式。
1.基本语法规则
1)大小写敏感
2)使用缩进表示层级关系
3)缩进时不允许使用Tab键,只允许使用空格。
4)缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5)# 表示注释,从这个字符一直到行尾,都会被解析器忽略。
YAML支持的数据结构有三种。
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
2.语法
key: value;kv之间有空格 k: v
注:
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
'#'表示注释
字符串默认不使用引号表示。如果字符串之中包含空格或特殊字符,需要放在引号之中
单引号和双引号都可以使用,双引号不会对特殊字符转义
单引号之中如果还有单引号,必须连续使用两个单引号转义
字符串可以写成多行,从第二行开始,必须有一个单空格缩进
换行符会被转为空格
yaml-cpp简单介绍
yaml-cpp 是一个开源库,地址在 github 上,https://github.com/jbeder/yaml-cpp
yaml-cpp 是通过 CMake 来进行构建和编译的
与OpenCV的简单比较
一般常用yaml-cpp和OpenCV进行解析
相比yaml-cpp,OpenCV的优点是可以在YAML文件中存储矩阵,读出来就是cv::Mat格式;缺点是OpenCV要求YAML文件有一个特殊的头,与标准的YAML文件并不兼容
或者也可以理解为OpenCV定义了一种新的YAML格式
yaml-cpp安装配置
1)下载源码
2)在源码目录创建一个 build 文件夹
mkdir build
3)进入到 build 文件夹,然后执行 cmake 命令
cd build
cmake ..
注: cmake 后面是 …,这代表从 build 上一层目录查找 CMakeLists.txt ,然后编译的文件都会存放在 build 文件夹,如果对编译的效果不满意,只要删除 build 文件就好了,其他源码目录并不受影响。
yaml-cpp 默认构建的是静态库,也就是 .a 文件,如果想构建动态库的话,就需要在 cmake 时指定
cmake -D BUILD_SHARED_LIBS=ON ..
4)编译成功后,会生成库文件,只需要将库文件和头文件拷贝到你自己的工程当中,就ok了
注:如果不想每次都到 copy 头文件到不同的工程中,
那么可以将头文件 copy 到系统默认的头文件目录,比如 ubuntu 的地址是 /usr/local/include,
将库文件拷贝到系统默认的 lib 文件,比如 ubuntu 是 /usr/local/lib。
5)或者不进行拷贝,继续进行如下步骤
make
sudo make install
CMakeLists配置
find_package(yaml-cpp REQUIRED)
include_directories(${YAML_CPP_INCLUDE_DIR})
target_link_libraries(node_name yaml-cpp)