Framework CLI pour C++ : cppcli — création d'applications console puissantes
Le développement d'interfaces console (CLI) en C++ nécessite souvent une analyse manuelle des arguments, la gestion des drapeaux et l'organisation des commandes. La bibliothèque cppcli fournit un framework prêt à l'emploi pour créer rapidement des applications CLI professionnelles. Elle permet de se concentrer sur la logique métier plutôt que sur l'infrastructure d'entrée-sortie. Dans cet article, nous allons examiner les fonctionnalités clés de cppcli, fournir des exemples de code et montrer comment l'intégrer dans votre projet.
Fonctionnalités principales de cppcli
- Déclaration déclarative des commandes — chaque commande est décrite comme une classe séparée ou une fonction lambda.
- Analyse automatique des arguments — prise en charge des arguments positionnels, nommés et des drapeaux.
- Sortie colorée et formatage — utilitaires intégrés pour la sortie stylisée (couleurs ANSI, tableaux, barres de progression).
- Validation et aide — génération automatique des messages d'aide et vérification des arguments obligatoires.
- Extensibilité — prise en charge des types d'arguments personnalisés et des middleware.
Démarrage rapide : installation et premier exemple
cppcli est distribué comme une bibliothèque header-only. Pour l'installer, clonez le dépôt ou utilisez CMake FetchContent. Intégration dans le projet :
#include <cppcli/cli.h>#include <iostream>
int main(int argc, char* argv[]) { cppcli::App app("Mon application", "1.0.0"); app.run(argc, argv); return 0;}Ceci est une structure minimale. Ajoutons maintenant une commande greet qui accepte un nom d'utilisateur.
Exemple : commande avec arguments
#include <cppcli/cli.h>
int main(int argc, char* argv[]) { cppcli::App app("Greeter", "1.0.0");
app.command("greet", "Salue l'utilisateur") .argument<std::string>("name", "Nom de l'utilisateur") .action([](const cppcli::Args& args) { std::string name = args.get<std::string>("name"); std::cout << "Bonjour, " << name << " !"; });
app.run(argc, argv); return 0;}Exécution : ./app greet Jean affichera Bonjour, Jean !. Si l'argument n'est pas fourni, cppcli affichera une erreur et l'aide.
Drapeaux et paramètres optionnels
Ajoutons un drapeau --formel pour un salut formel :
app.command("greet", "Salue l'utilisateur") .argument<std::string>("name", "Nom") .flag("--formel", "-f", "Salutation formelle") .action([](const cppcli::Args& args) { std::string name = args.get<std::string>("name"); bool formel = args.get<bool>("formel"); if (formel) std::cout << "Bonjour, " << name << " !"; else std::cout << "Salut, " << name << " !"; });Maintenant, ./app greet Jean --formel affichera Bonjour, Jean !.
Commandes imbriquées et sous-commandes
cppcli prend en charge une structure arborescente de commandes. Par exemple, pour un utilitaire de gestion de projets :
app.command("projet", "Gestion des projets") .command("creer", "Créer un projet") .argument<std::string>("nom", "Nom du projet") .action([](const cppcli::Args& args) { std::cout << "Projet créé : " << args.get<std::string>("nom") << ""; }) .command("supprimer", "Supprimer un projet") .argument<std::string>("nom", "Nom du projet") .flag("--force", "Sans confirmation") .action([](const cppcli::Args& args) { // logique de suppression });Appel : ./app projet
Aussi dans la bibliothèque
Envoi de SMS en Go (Golang) : bibliothèque API
Client OAuth pour Swift (iOS/macOS) : bibliothèque OAuthSwift
Apprentissage automatique en PHP : aperçu des bibliothèques pour l'intégration du ML