Frameworks CLI pour C++ : écrivez des applications console rapidement et facilement
Créer une interface de ligne de commande (CLI) de qualité est une partie importante du développement en C++. L'analyse manuelle des arguments via argc/argv et getopt devient rapidement lourde et sujette aux erreurs, surtout avec un grand nombre d'options. Des bibliothèques spécialisées — les frameworks CLI — viennent à la rescousse. Elles automatisent l'analyse, la génération d'aide, la vérification des types et aident à écrire un code plus propre et plus maintenable.
Dans cet article, nous examinerons les trois frameworks CLI les plus populaires et modernes pour C++ : CLI11, cxxopts et argparse. Vous découvrirez leurs points forts, verrez des exemples de code et pourrez choisir l'outil adapté à votre projet.
1. CLI11 — le standard moderne
CLI11 est une bibliothèque header-only qui est à juste titre considérée comme l'une des meilleures solutions pour C++11 et versions ultérieures. Elle offre une API intuitive, une validation puissante et une génération automatique d'aide.
Fonctionnalités clés :
- Header-only : ne nécessite pas de compilation — il suffit d'inclure le fichier d'en-tête.
- Aide automatique : les drapeaux
-het--helpfonctionnent immédiatement. - Validation : validateurs intégrés et personnalisés pour les arguments (plage, expression régulière, existence de fichier).
- Prise en charge des sous-commandes : idéal pour les utilitaires complexes (comme
gitoudocker). - Formatage : sortie d'aide personnalisable.
Exemple d'utilisation de CLI11 :
Une application simple qui accepte un nom et un drapeau de salutation optionnel :
#include <CLI/CLI.hpp>#include <iostream>
int main(int argc, char** argv) { CLI::App app{"Démonstration de CLI11"};
std::string name; bool greet = false;
app.add_option("-n,--name", name, "Votre nom")->required(); app.add_flag("-g,--greet", greet, "Afficher la salutation");
CLI11_PARSE(app, argc, argv);
std::cout << "Bonjour, " << name << "!" << std::endl; if (greet) { std::cout << "Bonne journée !" << std::endl; } return 0;}Comment ça fonctionne : La bibliothèque analyse elle-même les arguments, vérifie le caractère obligatoire de l'option --name et génère une aide lors de l'appel ./app --help.
2. cxxopts — simplicité et légèreté
cxxopts est une autre bibliothèque header-only, axée sur le minimalisme et la simplicité. Elle convient parfaitement aux petits utilitaires où les sous-commandes ne sont pas nécessaires, mais où la lisibilité du code est importante.
Fonctionnalités clés :
- API simple : ajout d'options par chaînage d'appels.
- Conversion automatique des types :
int,double,stringet autres. - Prise en charge des arguments positionnels.
- Préfixes personnalisables : vous pouvez utiliser
-ou--.
Exemple d'utilisation de cxxopts :
#include <cxxopts.hpp>#include <iostream>
int main(int argc, char** argv) { cxxopts::Options options("myapp", "Exemple cxxopts");
options.add_options() ("f,file", "Nom du fichier", cxxopts::value<std::string>()) ("v,verbose", "Sortie détaillée", cxxopts::value<bool>()->default_value("false")) ("h,help", "Afficher l'aide");
auto result = options.parse(argc, argv);
if (result.count("help")) { std::cout << options.help() << std::endl;