#include <boost/program_options.hpp>
namespace po = boost::program_options;
#include <iostream>
#include <fstream>
using namespace std;
int main(int ac, const char* av[])
{
try {
po::options_description desc("Allowed options");
po::options_description desc2("Generic options");
desc2.add_options()
("version,v", "", "print version string")
("help", "", "produce help message")
;
po::options_description desc3("Configuration");
desc3.add_options()
("output,o", "file", "where to send output")
("magic", "value", "magic value for the program")
.default_value("43")
;
desc.add(desc2);
desc.add(desc3);
po::variables_map vm;
po::options_and_arguments oa1 = parse_command_line(ac, av, desc);
po::store(oa1, vm, desc);
po::variables_map cfg_file_vm;
ifstream ifs("multiple_sources.cfg");
po::options_and_arguments oa2 = parse_config_file(ifs, desc3);
po::store(oa2, cfg_file_vm, desc3);
vm.next(&cfg_file_vm);
if (vm.count("help")) {
cout << desc << "\n";
return 0;
}
if (vm.count("version")) {
cout << "Multiple sources example, version 1.0\n";
return 0;
}
if (!vm["output"].empty())
cout << "output = " << vm["output"].as<string>() << "\n";
cout << "magic = " << vm["magic"].as<int>() << "\n";
}
catch(exception& e)
{
cout << e.what() << "\n";
return 1;
}
return 0;
}