카테고리 없음

yaml-cpp 사용 방법

개ㅁI 2023. 10. 24. 15:11

바이너리 파일만 존재할 때, config 파일을 수정해도 실행 파일에 바로 적용이 가능한 방법을 찾아보았다. 

그 결과 yaml 파일이나 json 파일을 이용한다고 한다. 

 

처음엔 json 파일을 사용하려고 했으나 내가 가진 cmake 버전이 3.11보다 낮아서 사용하지 못했다. 

json을 사용하시려는 분은 아래 링크를 참고하길 바란다. 

https://github.com/nlohmann/json/tree/bon8 

 

GitHub - nlohmann/json: JSON for Modern C++

JSON for Modern C++. Contribute to nlohmann/json development by creating an account on GitHub.

github.com

 


아무튼 나는 yaml-cpp를 사용하기로 했다. 

1. How to install

https://github.com/jbeder/yaml-cpp

 

GitHub - jbeder/yaml-cpp: A YAML parser and emitter in C++

A YAML parser and emitter in C++. Contribute to jbeder/yaml-cpp development by creating an account on GitHub.

github.com

sudo apt-get install libyaml-cpp-dev

위 깃허브에서 clone해도 되고 아래 명령어를 통해 다운받아도 된다. 

깃허브로 clone한 경우 make 하고 make install을 해야 한다. 

cd ymal-cpp
mkdir build
cmake ..
make
sudo make install

제대로 make install이 됐을 땐 ~/local/include 경로에 yaml-cpp 파일이 생긴 걸 확인할 수 있을 것이다. (아마도)

 

2. Exmaple code

내가 사용한 예제 코드는 아래와 같다. 

 

yaml-config-test.cpp

#include <iostream>
#include <yaml-cpp/yaml.h>

int main() {
    YAML::Node config = YAML::LoadFile("/home/nvidia/test/yaml-config/config.yaml");

    std::string name = config["name"].as<std::string>();
    int age = config["age"].as<int>();

    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;

    return 0;
}

 

config.yaml

name: Alice
age: 25

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)

project(yaml-config-test)

set(SOURCE_FILES yaml-config-test.cpp)

add_executable(yaml-config-test ${SOURCE_FILES})

include_directories(${YAML_CPP_INCLUDEDIR})
target_link_libraries(yaml-config-test PRIVATE yaml-cpp)

 

나는 CMakeLists.txt를 통해 build해 주었다. 

./yaml-config-test로 실행하면 다음과 같은 결과를 얻을 수 있다. 

Name: Alice
Age: 25

728x90