赞
踩
首先安装yaml-cpp库,可以参照这篇文章。
git clone https://github.com/jbeder/yaml-cpp.git
编译yaml-cpp
1. cd yaml-cpp
2. mkdir build
3. cd build
4. cmake ..
5. make
6. make install
要注意yaml-cpp的版本,0.5.2版本与1.2版本,有接口会不一样,版本用错的话会报错。目前来说,我使用的是0.5.2版本。
用上面的cmake ..
,有可能安装后只有.a
静态库。可以用以下命令查看:
cd /usr
sudo find -name *yaml-cpp*
如果没找到.so
动态库,而你又必须用动态库,那么安装时要把
cmake ..
改为
cmake -DBUILD_SHARED_LIBS=ON ..
在/usr/lib/下搜索yaml-cpp,若找到则表明已成功安装。
最好让.so
或者.a
,在/usr/local/lib
和/usr/lib
下都存在,没有的话就从另一个复制过去。
注意看/usr/local/include
或者/usr/include
有没有yaml-cpp
文件夹。
#ifndef TEST_H_
#define TEST_H_
#include <iostream>
#include <yaml-cpp/yaml.h>
template <typename T>
void operator>>(const YAML::Node& node, T& i);
double test_param1;
double test_param2;
#endif //TEST_H_
#include "test.h" template <typename T> void operator>>(const YAML::Node& node, T& i) { i = node.as<T>(); }; using namespace std; void loadYamlFile(std::string name){ YAML::Node node = YAML::LoadFile(name); node["test_param1"] >> test_param1; node["test_param2"] >> test_param2; cout << test_param1 << endl; cout << test_param2 << endl; } int main() { loadYamlFile("./test.yaml"); return 0; }
test_param1: 10
test_param2: 20
g++ test.cpp -lyaml-cpp -o test
./test
10
20
须在.h中include相关标准库
#include <yaml-cpp/yaml.h>
固定格式,套入即可
template <typename T>
void operator>>(const YAML::Node& node, T& i);
相应的,在.cpp中也是固定格式
template <typename T>
void operator>>(const YAML::Node& node, T& i) {
i = node.as<T>();
};
void loadYamlFile(std::string name)//函数名自己定义
{
YAML::Node node = YAML::LoadFile(name);//使用yaml库的关键
node["test_param1"] >> test_param1;
//".yaml文件中的参数名" >> .cpp文件中的参数名;
//意思是把.yaml中的参数值传给.cpp;一般取同名。
node["test_param2"] >> test_param2;
}
loadYamlFile("./test.yaml");
//yaml文件路径,需要注意,可以使用绝对路径/home/$USER/.../.yaml
//或者~/.../.yaml
在ROS中使用,需要对CMakeLists.txt修改,增加yaml-cpp库,且使用一个roslib的package,设置yaml文件的路径。
link_libraries( yaml-cpp)
find_package(catkin REQUIRED COMPONENTS
roslib
)
#include <ros/package.h>
std::string dir_package, dir_package_file;
dir_package = ros::package::getPath("xxx");
dir_package_file = dir_package + "/config/test.yaml";
loadYamlFile(dir_package_file);
.yaml文件要放在执行程序的空间中,编译程序的空间中不需要,算是一个小小的坑要注意。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。