Il semble y avoir un problème dans la façon dont boost :: program_options correspond à options_description.boost :: program_options - fait-il une chaîne de caractères exacte pour les options de la ligne de commande?
int main(int argc, char* argv[])
{
boost::program_options::options_description desc("CmdLine utility");
desc.add_options()
("hel", "hel message")
("help", "produce help message")
("helps","helps message")
;
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv,desc), vm);
boost::program_options::notify(vm);
if(vm.count("help")) {
std::cout << desc << std::endl;
}
if(vm.count("helps")) {
std::cout << "helps..." << std::endl;
}
if(vm.count("hel")) {
std::cout << "hel..." << std::endl;
}
return 0;
}
Sortie -
C:\code>cmd.exe --helps
helps...
C:\code>cmd.exe --help
helps...
C:\code>cmd.exe --hel
helps...
Les changements de sortie si je change l'ordre dans lequel les options sont ajoutées à l'aide add_options()
appel. De même, il semble que program_options ne fasse pas correspondre une chaîne de commande complète, donc même si vous entrez une sous-chaîne de l'option, elle la considérera comme une option valide sans effectuer de comparaison de chaîne complète. S'il s'agit d'une fonctionnalité boost :: program_options, y a-t-il un moyen de forcer la correspondance exacte des chaînes plutôt que de la faire avec la sous-chaîne correspondante? (J'utilise Boost version 1.42)
Je l'ai essayé sur ma machine Linux mais la sortie ne correspondait pas à ce que vous avez posté. J'utilise boost 1.42 et g ++ (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)). Quelle version boost et g ++ utilisez-vous? –
@Onkar J'utilise fedora 9, g ++ 4.3.0 et boost 1.34.1. Ils sont périmés, mais je ne pense pas que la fonctionnalité de boost :: program_options change entre-temps. –