Vous pouvez utiliser la librairie
Boost Program Options pour gérer les options de vos programmes C++.
On inclut les fichiers d'entête.
...
#include <boost/program_options.hpp>
#include <iostream>
...
On définit les raccourcis des espaces des noms.
...
namespace opt = boost::program_options;
...
On crée le module de description des options du programme.
...
int main(int argc, char **argv)
{
opt::options_description desc("All options");
...
return 0 ;
}
...
On définit les options du programme.
...
int main(int argc, char **argv)
{
...
desc.add_options()
("apples", opt::value<int>(), "how many apples do you have")
("oranges", opt::value<int>(), "how many oranges do you have")
("help", "produce help message");
...
}
...
On charge les arguments passés en ligne de commande pour créer un dictionnaire de variables d'options.
...
int main(int argc, char **argv)
{
...
opt::variables_map vm;
opt::store(opt::parse_command_line(argc, argv, desc), vm);
opt::notify(vm);
...
}
...
On affiche le menu d'aide si l'option (help) est présente.
...
int main(int argc, char **argv)
{
...
if (vm.count("help"))
{
std::cout << desc << "\n";
return 1;
}
...
}
...
On calcule le nombre de fruits à partir des valeurs des options (apples et oranges).
...
int main(int argc, char **argv)
{
...
std::cout << "Fruits count: "
<< vm["apples"].as<int>() + vm["oranges"].as<int>()
<< std::endl;
...
}
...
On lance le programme avec l'option (help).
...
setup.exe --help
...
All options:
--apples arg how many apples do you have
--oranges arg how many oranges do you have
--help produce help message
...
On lance le programme avec les options (oranges et apples).
...
setup.exe --oranges 5 --apples 10
...
...
Fruits count: 15
...
On lance le programme avec l'option (oranges, apples et help).
...
setup.exe --oranges 5 --apples 10 --help
...
All options:
--apples arg how many apples do you have
--oranges arg how many oranges do you have
--help produce help message
...
On inclut les fichiers d'entête.
...
#include <boost/program_options.hpp>
#include <iostream>
...
On définit les raccourcis des espaces des noms.
...
namespace opt = boost::program_options;
...
On crée le module de description des options du programme.
...
int main(int argc, char **argv)
{
opt::options_description desc("All options");
...
return 0 ;
}
...
On définit les options du programme. On attribut des noms courts aux options (oranges et apples). On rend l'option (oranges) obligatoire. On définit une valeur par défaut pour l'option (apples). Les autres options (help et name) sont facultatives.
...
int main(int argc, char **argv)
{
...
int oranges_var = 0;
desc.add_options()
("oranges,o", opt::value<int>(&oranges_var)->required(), "oranges that you have")
("name", opt::value<std::string>(), "your name")
("apples,a", opt::value<int>()->default_value(10), "apples that you have")
("help", "produce help message");
...
}
...
On charge les arguments passés en ligne de commande pour créer un dictionnaire de variables d'options.
...
int main(int argc, char **argv)
{
...
opt::variables_map vm;
opt::store(opt::parse_command_line(argc, argv, desc), vm);
...
}
...
On affiche le menu d'aide si l'option (help) est présente.
...
int main(int argc, char **argv)
{
...
if (vm.count("help"))
{
std::cout << desc << "\n";
return 1;
}
...
}
...
On charge le fichier de configuration pour initialiser les valeurs des options prédéfinies dans le fichier et non fournies en ligne de commande.
...
int main(int argc, char **argv)
{
...
const char *configFile = "res/config/options.cfg";
try
{
opt::store(opt::parse_config_file<char>(configFile, desc), vm);
}
catch (const opt::reading_file &e)
{
std::cout << "Error: " << e.what() << std::endl;
}
...
}
...
On notifie la mise à jour de la logique interne du gestionnaire d'options.
...
int main(int argc, char **argv)
{
...
try
{
opt::notify(vm);
}
catch (const opt::required_option &e)
{
std::cout << "Error: " << e.what() << std::endl;
return 2;
}
...
}
...
On affiche le nom si l'option (name) est présente.
...
int main(int argc, char **argv)
{
...
if (vm.count("name"))
{
std::cout << "Hi," << vm["name"].as<std::string>() << "!\n";
}
...
}
...
On calcule le nombre de fruits à partir des valeurs des options (apples et oranges).
...
int main(int argc, char **argv)
{
...
std::cout << "Fruits count: "
<< vm["apples"].as<int>() + vm["oranges"].as<int>()
<< std::endl;
...
}
...
On initialise les options (oranges et name) à partir du fichier de configuration.
...
# Fichier de configuration des options
oranges=20
name=ReadyDEV
...
On lance le programme avec l'option (help).
...
setup.exe --help
...
All options:
-o [ --oranges ] arg oranges that you have
--name arg your name
-a [ --apples ] arg (=10) apples that you have
--help produce help message
...
On lance le programme sans aucune option.
...
setup.exe
...
Hi,ReadyDEV!
Fruits count: 30
...
On lance le programme avec les options (oranges, apples et name).
...
setup.exe --oranges 5 --apples 10 --name ReadyTEAM
...
Hi,ReadyTEAM!
Fruits count: 15
...
On lance le programme avec les options (oranges, apples, name et help).
...
setup.exe --oranges 5 --apples 10 --name ReadyTEAM --help
...
All options:
-o [ --oranges ] arg oranges that you have
--name arg your name
-a [ --apples ] arg (=10) apples that you have
--help produce help message
...