Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Boost program options- crash on parsing command line

I have the following boost::program_options program.

boost::program_options::options_description opts("Allowed options");
opts.add_options()
    ("help", "produce help message"),
    ("mingw", boost::program_options::value<std::string>(), "Set the install path for MinGW"),
    ("triple", boost::program_options::value<std::string>(), "Set the target triple"),
    ("output", boost::program_options::value<std::string>(), "Set the output file"),
    ("input", boost::program_options::value<std::vector<std::string>>(), "Set an input file."),
    ("include", boost::program_options::value<std::vector<std::string>>(), "Set an include path.")
;

boost::program_options::positional_options_description posopts;
posopts.add("input", -1);

boost::program_options::variables_map vm;
try {
    boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(opts).positional(posopts).run(), vm);
} catch(std::exception& e) {
    std::cout << e.what();
    std::cin.get();
}
boost::program_options::notify(vm);

if (vm.find("help") != vm.end()) {
    std::cout << opts << "\n";
    std::cin.get();
    return 1;
}
// Actual program logic

However, when I specify --mingw="stuff" on the command line, I found that it was rejected. After issuing the --help command, it seems that only the first option of the options in the list was actually registered with opts- even though chaining it in this way is what the tutorial recommends.

What's going wrong with this simple sample program? It's basically direct from the tutorial.

like image 878
Puppy Avatar asked Jul 07 '13 18:07

Puppy


Video Answer


1 Answers

Looking at the tutorial, I don't see commas between the options. ie:

desc.add_options()
    ("help", "produce help message")  // no comma here!
    ("compression", po::value<int>(), "set compression level")
;

Try removing the commas you have at the end of each option.

like image 71
Joe Z Avatar answered Sep 29 '22 23:09

Joe Z