yaml-cpp für C++: Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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:

Empfehlungen