CLI-Framework für C++: cppcli — Erstellung von Konsolenanwendungen

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

CLI-Framework für C++: cppcli — Erstellung leistungsstarker Konsolenanwendungen



Die Entwicklung von Konsolenschnittstellen (CLI) in C++ erfordert oft manuelles Parsen von Argumenten, die Verarbeitung von Flags und die Organisation von Befehlen. Die Bibliothek cppcli bietet ein fertiges Framework für die schnelle Erstellung professioneller CLI-Anwendungen. Sie ermöglicht es, sich auf die Geschäftslogik zu konzentrieren, anstatt auf die Ein-/Ausgabe-Infrastruktur. In diesem Artikel werden wir die wichtigsten Funktionen von cppcli erläutern, Codebeispiele zeigen und erklären, wie Sie es in Ihr Projekt integrieren.



Hauptfunktionen von cppcli



  • Deklarative Definition von Befehlen — jeder Befehl wird als separate Klasse oder Lambda-Funktion beschrieben.
  • Automatisches Argument-Parsing — Unterstützung für Positions-, benannte Argumente und Flags.
  • Farbige Ausgabe und Formatierung — integrierte Hilfsmittel für styled output (ANSI-Farben, Tabellen, Fortschrittsbalken).
  • Validierung und Hilfe — automatische Generierung von Hilfemeldungen und Überprüfung erforderlicher Argumente.
  • Erweiterbarkeit — Unterstützung für benutzerdefinierte Argumenttypen und Middleware.


Schnellstart: Installation und erstes Beispiel



cppcli wird als Header-Only-Bibliothek vertrieben. Klonen Sie das Repository oder verwenden Sie CMake FetchContent zur Installation. Einbindung in das Projekt:



#include <cppcli/cli.h>#include <iostream>

int main(int argc, char* argv[]) { cppcli::App app("Meine Anwendung", "1.0.0"); app.run(argc, argv); return 0;}


Dies ist ein minimales Grundgerüst. Fügen wir nun einen Befehl greet hinzu, der einen Benutzernamen entgegennimmt.



Beispiel: Befehl mit Argumenten



#include <cppcli/cli.h>

int main(int argc, char* argv[]) { cppcli::App app("Greeter", "1.0.0");

app.command("greet", "Begrüßt den Benutzer") .argument<std::string>("name", "Benutzername") .action([](const cppcli::Args& args) { std::string name = args.get<std::string>("name"); std::cout << "Hallo, " << name << "!"; });

app.run(argc, argv); return 0;}


Aufruf: ./app greet Ivan gibt Hallo, Ivan! aus. Wenn das Argument fehlt, gibt cppcli einen Fehler und die Hilfe aus.



Flags und optionale Parameter



Fügen wir ein Flag --formal für eine formelle Begrüßung hinzu:



app.command("greet", "Begrüßt den Benutzer")    .argument<std::string>("name", "Name")    .flag("--formal", "-f", "Formelle Begrüßung")    .action([](const cppcli::Args& args) {        std::string name = args.get<std::string>("name");        bool formal = args.get<bool>("formal");        if (formal)            std::cout << "Guten Tag, " << name << "!";        else            std::cout << "Hallo, " << name << "!";    });


Jetzt gibt ./app greet Ivan --formal Guten Tag, Ivan! aus.



Verschachtelte Befehle und Unterbefehle



cppcli unterstützt eine baumartige Befehlsstruktur. Zum Beispiel für ein Projektverwaltungstool:



app.command("project", "Projektverwaltung")    .command("create", "Projekt erstellen")        .argument<std::string>("name", "Projektname")        .action([](const cppcli::Args& args) {            std::cout << "Projekt erstellt: " << args.get<std::string>("name") << "";        })    .command("delete", "Projekt löschen")        .argument<std::string>("name", "Projektname")        .flag("--force", "Ohne Bestätigung")        .action([](const cppcli::Args& args) {            // Löschlogik        });


Aufruf: ./app project

Empfehlungen