#include #include #include #include #include using namespace std; using namespace boost::program_options; struct ProgramOptions { string configFile; string configString; }; int prepareOptions(ProgramOptions &po, int argc, char **argv) { options_description desc("Project Usage:\n\n" "\tproject \n\n" "Options"); desc.add_options() ("help", "display this message") ("config", value(&po.configFile), "config file name") ("config-value", value(&po.configString), "single config value") ; variables_map vm; try { store(command_line_parser(argc, argv).options(desc).run(), vm); notify(vm); } catch (unknown_option e) { cerr << "Error in command line: " << e.what() << "\n\n"; cout << desc << "\n"; return 1; } if (argc <= 1 || vm.count("help")) { cout << desc << "\n"; return 1; } if (!po.configFile.empty()) { printf("config: %s\n", po.configFile.c_str()); } if (!po.configString.empty()) { printf("config-value: %s\n", po.configString.c_str()); } return 0; } int main(int argc, char **argv) { ProgramOptions po; return prepareOptions(po, argc, argv); }