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
Auch in der Bibliothek
CSVImporter: Arbeiten mit CSV in Swift
Arbeiten mit CSV in PHP: Die Bibliothek SplFileObject und integrierte Funktionen
Event Bus und Observer-Muster in PHP: Implementierung und Beispiele
Flow für Kotlin: Vollständiges Tutorial mit Beispielen
OAuth-Client für Java: ScribeJava und Spring Security OAuth2