I want to parse multiple command line arguments using boost::program_options. However, some arguments are strings enclosed in double quotes. This is what I have -
void processCommands(int argc, char *argv[]) {
std::vector<std::string> createOptions;
boost::program_options::options_description desc("Allowed options");
desc.add_options()
("create", boost::program_options::value<std::vector<std::string> >(&createOptions)->multitoken(), "create command")
;
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("create") >= 1) {
std::string val1 = createOptions[0];
std::string val2 = createOptions[1];
...
// call some function passing val1, val2.
}
}
this works fine when I do
cmdparsing.exe --create arg1 arg2
But does not work when I do
cmdparsing.exe --create "this is arg1" "this is arg2"
from windows command line. For second option, it gets converted to ["this" "is" "arg1" "this" "is" "arg2"]
in createOptions vector. Thus, val1
gets "this"
and val2
gets
"is"
instead of "this is arg1"
and "this is arg2"
respectively.
How can I use boost::program_option to make this work ?
cmdparsing.exe --create this is arg1
andcmdparsing.exe --create "this is arg1"
result in the same contents for theargv
array, then you have to find some other way of convincing your OS that the part in quotes needs to be kept together. – Epigrammatize