yaml-cpp für C++: Komplette Anleitung mit Beispielen
1. Was ist yaml-cpp und warum braucht man es?
yaml-cpp ist eine moderne, leichtgewichtige C++-Bibliothek zum Parsen und Erzeugen von YAML-Dateien. YAML (YAML Ain't Markup Language) ist ein menschenlesbares Datenformat, das häufig für Konfigurationsdateien, Datenstrukturbeschreibungen, CI/CD-Pipelines (z. B. GitHub Actions, GitLab CI) und den Datenaustausch zwischen Diensten verwendet wird. Im Gegensatz zu JSON unterstützt YAML Kommentare, mehrzeilige Strings, Anker und Aliase – ideal für Konfigurationen.
Warum yaml-cpp verwenden? Wenn Sie eine C++-Anwendung entwickeln, die Konfigurationsdateien lesen muss (z. B. Servereinstellungen, Parameter für Machine-Learning-Modelle, Abhängigkeitsbeschreibungen), bietet yaml-cpp eine einfache und typsichere API. Die Bibliothek ist vollständig kompatibel mit der YAML-1.2-Spezifikation, unterstützt alle Datentypen (Skalare, Sequenzen, Mappings) und ermöglicht die einfache Umwandlung von YAML-Dokumenten in C++-Strukturen und zurück.
Die wichtigsten Vorteile: minimale Abhängigkeiten (nur die C++-Standardbibliothek C++11/14/17), optionale Header-Only-Builds, Unicode-Unterstützung, benutzerdefinierte Serialisierung für eigene Typen und eine aktive Community (über 5.000 Sterne auf GitHub).
2. Installation
yaml-cpp wird nicht über sprachspezifische Paketmanager (pip, npm) installiert. Für C++ verwendet man systemeigene Paketmanager oder baut die Bibliothek aus dem Quellcode.
Linux (Debian/Ubuntu)
sudo apt-get install libyaml-cpp-dev
macOS (Homebrew)
brew install yaml-cpp
Windows (vcpkg)
vcpkg install yaml-cpp
Aus dem Quellcode bauen (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
Nach der Installation binden Sie die Bibliothek in Ihre CMakeLists.txt ein:
find_package(yaml-cpp REQUIRED)
target_link_libraries(my_project yaml-cpp)
3. Schnellstart – Ein minimales funktionierendes Beispiel
Erstellen Sie eine Datei config.yaml:
server:
host: "localhost"
port: 8080
debug: true
Lesen Sie diese mit yaml-cpp ein:
#include <iostream>
#include <yaml-cpp/yaml.h>
int main() {
// YAML-Datei laden
YAML::Node config = YAML::LoadFile("config.yaml");
// Werte auslesen
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;
}
Kompilieren: g++ -std=c++17 main.cpp -lyaml-cpp -o app
4. Wichtige Methoden, Funktionen und Klassen
4.1. YAML::Node – Die zentrale Klasse für Knoten
Signatur: class YAML::Node
Beschreibung: Repräsentiert jedes Element eines YAML-Dokuments: Skalar, Sequenz (Array) oder Mapping (Dictionary). Unterstützt Iteration, Zugriff über Schlüssel/Index und Typprüfung.
YAML::Node node;
node["name"] = "Alice";
node["age"] = 30;
node["hobbies"].push_back("lesen");
node["hobbies"].push_back("programmieren");
std::cout << node["name"].as<std::string>() << "\n"; // Alice
std::cout << node["hobbies"][0].as<std::string>() << "\n"; // lesen
4.2. YAML::LoadFile() – Aus Datei laden
Signatur:
Auch in der Bibliothek
GraphQL für Kotlin: Leistungsstarke Bibliotheken zur API-Erstellung
Arbeiten mit Excel in Swift auf iOS und macOS: Bibliotheken und Beispiele
OpenAI SDK für JavaScript (Node.js): Komplettguide mit Beispielen
Gin für Go: Vollständiger Leitfaden mit Beispielen
ARKit Swift: Das komplette ARKit-Tutorial mit Beispielen