学习如何写配置系统的时候用到了 yaml-cpp 读写 yaml 配置文件,打算做一点简单的学习笔记记录一下基本用法。
从 github 下载安装 yaml-cpp ,这里就不具体记录了,直接上手写 yaml 文件。
YAML文件
这里简单提一下YAML文件格式
如果是 map 就用
key: value
如果是数组就用
- value1
- value2
- value3
注意:冒号':'
和'-'
后面要加空格。
这里我写了一个如下的文件,命名为config.yml :
name: XiaoMing
sex: male
age: 18
ID: 001
results:
- Math: 100
- Chinese: 95
- English: 85
- C++: 97
average: 94.25
C++ 程序
读取上述文件的C++程序如下,这里我仅仅实现了简单的读,有空搞一个改写。
#include <iostream>
#include <fstream>
#include <yaml-cpp/yaml.h> //注意带上 yaml-cpp/yaml.h 头文件
using namespace std;
void read_yml(const YAML::Node& node){
if(node.IsMap()){//是map吗
for(auto it = node.begin(); it != node.end(); ++it) {
cout << (it->first).as<string>() <<':';
if((it->first).as<string>() == "results"){
cout << endl;;
}
read_yml(it->second);
}
}
if(node.IsSequence()){//是数组吗
for(size_t i = 0; i < node.size(); ++i) {
cout << '\t';
read_yml(node[i]);
}
}
if(node.IsScalar()){//是纯量吗
cout << node.as<string>() << endl;
}
}
int main(int argc,char** argv)
{
//加载yml文件
YAML::Node node = YAML::LoadFile("./config.yml");
//读取yml文件,这里输出到控制台
read_yml(node);
return 0;
}
由于我用 cmake 编程,因此要写一个CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(yaml_test)
set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O0 -ggdb -std=c++11")
include_directories(include)
#查找库yaml-cpp,将结果存在变量YAMLCPP
find_library(YAMLCPP yaml-cpp)
set(SRCS yaml_test.cpp)
add_executable(yaml_test ${SRCS})
target_link_libraries(yaml_test ${YAMLCPP})
#设置可执行文件的输出目录
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
运行结果