Frameworks CLI pour C++ : comment créer une application console à partir de zéro

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Frameworks CLI pour C++ : de l'analyse d'arguments aux utilitaires console complets



Le développement d'utilitaires console en C++ est l'une des tâches les plus courantes pour les programmeurs. Qu'il s'agisse d'un outil de traitement de données, d'un compilateur ou d'un script DevOps — une analyse correcte des arguments de la ligne de commande est indispensable. Le traitement manuel de argc/argv se transforme rapidement en un mélange de strcmp et atoi, et la gestion des options, des drapeaux et des sous-commandes devient un cauchemar. C'est là que les frameworks CLI viennent à la rescousse — des bibliothèques qui prennent en charge toute la routine : description déclarative de l'interface, génération d'aide, validation des types et même l'autocomplétion pour le shell.



Dans cet article, nous examinerons trois solutions les plus populaires pour C++ : CLI11, cxxopts et docopt.cpp. Vous apprendrez comment créer rapidement une application console professionnelle avec un minimum d'effort.



1. CLI11 — le standard moderne



CLI11 (GitHub : CLIUtils/CLI11) est une bibliothèque header-only pour C++11/14/17. Elle est considérée comme l'étalon-or grâce à son API concise et ses capacités puissantes : prise en charge des sous-commandes imbriquées, validation des plages, options à valeurs multiples, drapeaux, arguments positionnels et génération automatique de --help.



Installation

Il suffit de copier le fichier d'en-tête CLI11.hpp dans le projet ou de l'inclure via CMake FetchContent.



Exemple : utilitaire d'archivage avec options

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

int main(int argc, char** argv) { CLI::App app("Archiveur simple");

std::string input_file; std::string output_file = "archive.zip"; int compression_level = 5; bool verbose = false;

app.add_option("-i,--input", input_file, "Fichier d'entrée")->required(); app.add_option("-o,--output", output_file, "Fichier de sortie"); app.add_option("-c,--compression", compression_level, "Niveau de compression (1-9)") ->check(CLI::Range(1, 9)); app.add_flag("-v,--verbose", verbose, "Sortie détaillée");

CLI11_PARSE(app, argc, argv);

std::cout << "Archivage : " << input_file << ""; std::cout << "Sortie : " << output_file << ""; std::cout << "Niveau : " << compression_level << ""; if (verbose) std::cout << "Mode débogage activé"; return 0;}


Exécution : ./archiver -i data.txt -o backup.zip -c 9 -v
En cas d'erreur ou avec --help, CLI11 affiche automatiquement une belle description.



2. cxxopts — légèreté et simplicité



cxxopts (GitHub : jarro2783/cxxopts) est une autre bibliothèque header-only. Elle est plus simple que CLI11, mais couvre 90% des besoins : options courtes/longues, valeurs par défaut, listes et aide. Idéale pour les petits utilitaires.



Exemple : lecture de configuration

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

int main(int argc, char* argv[]) { cxxopts::Options options("greeter", "Programme de bienvenue");

options.add_options() ("n,name", "Nom d'utilisateur", cxxopts::value<std::string>()) ("a,age", "Âge", cxxopts::value<int>()->default_value("0")) ("v,verbose", "Sortie détaillée", cxxopts::value<bool>()->default_value("false")) ("h,help", "Aide");

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

if (result.count("help")) { std::cout << options.help() << ""; return 0; }

std::string name = result["name"].as<std::string>(); int age = result["age"].as<int>(); bool verbose = result["verbose"].as<bool>();

std::cout << "Bonjour, " << name << "!"; if (verbose) std::cout << "Âge

Recommendations