바이너리 파일만 존재할 때, 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
바이너리 파일만 존재할 때, 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