一yaml的环境部署
参考文章:https://www.twblogs.net/a/5baaa2a12b7177781a0e5771/zh-cn 环境安装到使用,可参考强
yaml-cpp的版本和源码github:https://github.com/jbeder/yaml-cpp/releases
环境部署流程:
1.下载版本,比如:yaml-cpp-yaml-cpp-0.6.2
2.在linux上解析,进入目录,在代码目录下创建build文件夹
3.接下来的四个命令参考wiki里的,如果成功会在build里产生一个libyaml-cpp.a的文件
cd build
cmake ..
make
make install
4.可以去看下/usr/local/lib/libyaml-cpp.a是否存在,上面make成功的话,会有的。如果没有参考wiki里的find看看在哪
二编译执行
例子参考wiki里的就行,>>的重载这块可以删掉的,也不太建议,还是用as<int>()这样转换后赋值的好。
编译命令:g++ -g -std=c++11 robot.cpp /usr/local/lib/libyaml-cpp.a
执行命令 ./a.out
三关键的编程点
#include "yaml-cpp/yaml.h" //安装yaml-cpp参考google code 主页
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
typedef struct TagCameraConfigInfoS {
int cameraId;
bool isStitch;
int stFullSizeW;
}CAMERA_CONFIG_INFO_S;
int main()
{
std::ifstream fin("cameracfg.yaml"); // 读入yaml配置文件。
try {
// load yaml file
YAML::Node doc = YAML::Load(fin);
if (!doc["cameras"]) {
printf("the cameras nodes doesn't exist\n");
return -1;
}
// parse cameras params
std::string sc = "cameras";
YAML::Node camerasNode = doc[sc];
for (unsigned int i = 0; i < camerasNode.size(); i++) {
const YAML::Node& cNode = camerasNode[i];
std::cout << cNode << "\n";
std::cout << "===================" << std::endl;
CAMERA_CONFIG_INFO_S camS;
camS.cameraId = (i+1);
camS.isStitch = cNode["isStitch"].as<bool>();
if (cNode["fullSizeWidth"]) {
camS.stFullSizeW = cNode["fullSizeWidth"].as<int>();
} else {
printf("some camera loss fullSizeWidth param");
return -1;
}
}
std::cout << "parse end!" << std::endl;
} catch (const YAML::Exception& e) {
printf("when parsing camera config yaml file error!\n");
std::cerr << e.what() << "\n";
return -1;
}
return 0;
}
四.对应的yaml文件
#Camera Config
cameras:
- cameraName: FRONT_1
cameraType: 1
isStitch: false
fullSizeWidth: 2048
- cameraName: FRONT_2
cameraType: 2
isStitch: true
fullSizeWidth: 2048