一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