CLI-Frameworks für C++: Konsolenanwendungen schnell und bequem schreiben

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-Frameworks für C++: Konsolenanwendungen schnell und bequem schreiben



Die Erstellung einer qualitativ hochwertigen Befehlszeilenschnittstelle (CLI) ist ein wichtiger Teil der C++-Entwicklung. Das manuelle Parsen von Argumenten über argc/argv und getopt wird schnell umständlich und fehleranfällig, besonders bei vielen Optionen. Hier helfen spezialisierte Bibliotheken – CLI-Frameworks. Sie automatisieren das Parsen, die Generierung von Hilfetexten, die Typprüfung und helfen, saubereren und wartbareren Code zu schreiben.



In diesem Artikel betrachten wir die drei beliebtesten und modernsten CLI-Frameworks für C++: CLI11, cxxopts und argparse. Sie erfahren ihre Stärken, sehen Codebeispiele und können das passende Werkzeug für Ihr Projekt auswählen.



1. CLI11 – Der moderne Standard



CLI11 ist eine Header-Only-Bibliothek, die zu Recht als eine der besten Lösungen für C++11 und neuer gilt. Sie bietet eine intuitive API, leistungsstarke Validierung und automatische Hilfegenerierung.



Hauptfunktionen:

  • Header-Only: Kein Build erforderlich – einfach die Header-Datei einbinden.
  • Automatische Hilfe: Die Flags -h und --help funktionieren sofort.
  • Validierung: Integrierte und benutzerdefinierte Validatoren für Argumente (Bereich, regulärer Ausdruck, Dateiexistenz).
  • Unterstützung für Unterbefehle: Ideal für komplexe Dienstprogramme (wie git oder docker).
  • Formatierung: Anpassbare Hilfstextausgabe.


Beispiel für die Verwendung von CLI11:

Eine einfache Anwendung, die einen Namen und ein optionales Begrüßungs-Flag akzeptiert:

#include <CLI/CLI.hpp>#include <iostream>

int main(int argc, char** argv) { CLI::App app{"CLI11-Demonstration"};

std::string name; bool greet = false;

app.add_option("-n,--name", name, "Ihr Name")->required(); app.add_flag("-g,--greet", greet, "Begrüßung ausgeben");

CLI11_PARSE(app, argc, argv);

std::cout << "Hallo, " << name << "!" << std::endl; if (greet) { std::cout << "Einen schönen Tag!" << std::endl; } return 0;}

So funktioniert es: Die Bibliothek parst die Argumente selbst, überprüft die Erforderlichkeit der Option --name und generiert bei Aufruf von ./app --help einen Hilfetext.



2. cxxopts – Einfachheit und Leichtgewichtigkeit



cxxopts ist eine weitere Header-Only-Bibliothek, die auf Minimalismus und Einfachheit ausgerichtet ist. Sie eignet sich hervorragend für kleine Dienstprogramme, bei denen keine Unterbefehle benötigt werden, aber die Lesbarkeit des Codes wichtig ist.



Hauptfunktionen:

  • Einfache API: Hinzufügen von Optionen durch Methodenverkettung.
  • Automatische Typkonvertierung: int, double, string und andere.
  • Unterstützung für Positionsargumente.
  • Anpassbare Präfixe: Es können - oder -- verwendet werden.


Beispiel für die Verwendung von cxxopts:

#include <cxxopts.hpp>#include <iostream>

int main(int argc, char** argv) { cxxopts::Options options("myapp", "cxxopts-Beispiel");

options.add_options() ("f,file", "Dateiname", cxxopts::value<std::string>()) ("v,verbose", "Ausführliche Ausgabe", cxxopts::value<bool>()->default_value("false")) ("h,help", "Hilfe anzeigen");

auto result = options.parse(argc, argv);

if (result.count("help")) { std::cout << options.help() << std::endl;

Empfehlungen