yaml-cpp pour C++ : guide complet avec exemples
1. Qu'est-ce que yaml-cpp et pourquoi l'utiliser ?
yaml-cpp est une bibliothèque C++ moderne et légère pour analyser (parser) et générer des fichiers YAML. YAML (YAML Ain't Markup Language) est un format de sérialisation de données lisible par l'homme, couramment utilisé pour les fichiers de configuration, la description de structures de données, les pipelines CI/CD (par exemple, GitHub Actions, GitLab CI) et l'échange de données entre services. Contrairement à JSON, YAML prend en charge les commentaires, les chaînes multilignes, les ancres et les alias, ce qui le rend idéal pour les configurations.
Pourquoi utiliser yaml-cpp ? Si vous développez une application en C++ qui doit lire des fichiers de configuration (paramètres serveur, configuration de modèle de machine learning, description de dépendances), yaml-cpp offre une API simple et type-safe. La bibliothèque est entièrement conforme à la spécification YAML 1.2, prend en charge tous les types de données (scalaires, séquences, mappings) et permet de convertir facilement des documents YAML en structures C++ et vice-versa.
Avantages clés : dépendances minimales (uniquement la bibliothèque standard C++11/14/17), compilation optionnelle en header-only, support Unicode, sérialisation personnalisable pour vos propres types, et une communauté active (plus de 5 000 étoiles sur GitHub).
2. Installation
Contrairement à pip ou npm, yaml-cpp ne s'installe pas via des gestionnaires de paquets de langage. Pour C++, on utilise les gestionnaires de paquets système ou une compilation depuis les sources.
Linux (Debian/Ubuntu)
sudo apt-get install libyaml-cpp-dev
macOS (Homebrew)
brew install yaml-cpp
Windows (vcpkg)
vcpkg install yaml-cpp
Compilation depuis les sources (CMake)
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake -DYAML_BUILD_SHARED_LIBS=ON ..
make
sudo make install
Après l'installation, liez la bibliothèque dans votre CMakeLists.txt :
find_package(yaml-cpp REQUIRED)
target_link_libraries(my_project yaml-cpp)
3. Démarrage rapide — exemple minimal fonctionnel
Créez un fichier config.yaml :
server:
host: "localhost"
port: 8080
debug: true
Lisons-le avec yaml-cpp :
#include <iostream>
#include <yaml-cpp/yaml.h>
int main() {
// Chargement du fichier YAML
YAML::Node config = YAML::LoadFile("config.yaml");
// Lecture des valeurs
std::string host = config["server"]["host"].as<std::string>();
int port = config["server"]["port"].as<int>();
bool debug = config["debug"].as<bool>();
std::cout << "Host: " << host << "\n";
std::cout << "Port: " << port << "\n";
std::cout << "Debug: " << std::boolalpha << debug << "\n";
return 0;
}
Compilation : g++ -std=c++17 main.cpp -lyaml-cpp -o app
4. Méthodes / fonctions / classes principales
4.1. YAML::Node — la classe centrale pour manipuler les nœuds
Signature : class YAML::Node
Description : Représente n'importe quel élément d'un document YAML : scalaire, séquence (tableau) ou mapping (dictionnaire). Prend en charge l'itération, l'accès par clé/index et la vérification de type.
YAML::Node node;
node["name"] = "Alice";
node["age"] = 30;
node["hobbies"].push_back("lecture");
node["hobbies"].push_back("programmation");
std::cout << node["name"].as<std::string>() << "\n"; // Alice
std::cout << node["hobbies"][0].as<std::string>() << "\n"; // lecture
4.2. YAML::LoadFile() — chargement depuis un fichier
Signature :
Aussi dans la bibliothèque
Recommendations