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
-hund--helpfunktionieren 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
gitoderdocker). - 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,stringund 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; Auch in der Bibliothek
Kotlin Symbol Processing (KSP) für Kotlin: Komplettguide mit Beispielen
Bibliothek kotlinx.serialization für JSON-Verarbeitung in Kotlin
Arbeiten mit Bildern in PHP: Die Bibliotheken GD und Imagick
Combine für Swift: vollständige Anleitung mit Beispielen