目录
背景
yaml的使用还是挺重要的,一是省去了你每次配置参数就得重编译的麻烦,二是有助于批量自动化跑程序。笔者就是在构建批量自动化算指标的过程中,接触到了这个东西。
一、安装
1.1 直接安装到系统
项目地址:https://github.com/jbeder/yaml-cpp
拉取项目到本地,编译,安装
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake -D BUILD_SHARED_LIBS=ON ..
make -j16
sudo make install
1.2 安装到项目内
我更喜欢用这种方式,通用性更好
依旧是拉取项目,编译生成库文件
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake -D BUILD_SHARED_LIBS=ON ..
make -j16
然后此时,将build文件夹下的libyaml-cpp.so,libyaml-cpp.so.0.x,libyaml-cpp.so.0.x.0三个动态库文件,拷贝到你项目中的lib文件夹内,再把build上级文件夹 include/yaml-cpp放入你项目的第三方库头文件夹下,然后,按照我第一篇博客的方法,配置好CMakeLists.txt就好
C++项目经验(1)——切实理解#include<>和#include““的区别,并利用它“抠库”
二、使用
参考博客:c++ 开发中利用yaml-cpp读写yaml配置文件_frank909的博客-CSDN博客_yaml.cpp
写得比较全
三、报错解决
可能会出现以下错误:
In function 'YAML::Node::Scalar[abi:cxx11]() const':
undefined reference to 'YAML::detail::node_data::empty_scalar[abi:cxx11]'
...
可能是已经在系统里安装过,重复导致的,可以locate一下
locate libyaml-cpp.so
可能会发现系统的安装路径,然后你项目里include时,不小心弄到系统里去了,而不是项目内的yaml-cpp
解决方案:保证CMakeLists.txt的头文件路径和项目内的#include"yaml-cpp/yaml.h"是优先指向项目内的yaml文件,而不是系统,不然就只能删除系统中的yaml了