123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Copyright Vladimir Prus 2002-2004.
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt
- // or copy at http://www.boost.org/LICENSE_1_0.txt)
- /* Shows how to use both command line and config file. */
- #include <boost/program_options.hpp>
- namespace po = boost::program_options;
- #include <iostream>
- #include <fstream>
- #include <iterator>
- using namespace std;
- // A helper function to simplify the main part.
- template<class T>
- ostream& operator<<(ostream& os, const vector<T>& v)
- {
- copy(v.begin(), v.end(), ostream_iterator<T>(os, " "));
- return os;
- }
- int main(int ac, char* av[])
- {
- try {
- int opt;
- string config_file;
-
- // Declare a group of options that will be
- // allowed only on command line
- po::options_description generic("Generic options");
- generic.add_options()
- ("version,v", "print version string")
- ("help", "produce help message")
- ("config,c", po::value<string>(&config_file)->default_value("multiple_sources.cfg"),
- "name of a file of a configuration.")
- ;
-
- // Declare a group of options that will be
- // allowed both on command line and in
- // config file
- po::options_description config("Configuration");
- config.add_options()
- ("optimization", po::value<int>(&opt)->default_value(10),
- "optimization level")
- ("include-path,I",
- po::value< vector<string> >()->composing(),
- "include path")
- ;
- // Hidden options, will be allowed both on command line and
- // in config file, but will not be shown to the user.
- po::options_description hidden("Hidden options");
- hidden.add_options()
- ("input-file", po::value< vector<string> >(), "input file")
- ;
-
- po::options_description cmdline_options;
- cmdline_options.add(generic).add(config).add(hidden);
- po::options_description config_file_options;
- config_file_options.add(config).add(hidden);
- po::options_description visible("Allowed options");
- visible.add(generic).add(config);
-
- po::positional_options_description p;
- p.add("input-file", -1);
-
- po::variables_map vm;
- store(po::command_line_parser(ac, av).
- options(cmdline_options).positional(p).run(), vm);
- notify(vm);
-
- ifstream ifs(config_file.c_str());
- if (!ifs)
- {
- cout << "can not open config file: " << config_file << "\n";
- return 0;
- }
- else
- {
- store(parse_config_file(ifs, config_file_options), vm);
- notify(vm);
- }
-
- if (vm.count("help")) {
- cout << visible << "\n";
- return 0;
- }
- if (vm.count("version")) {
- cout << "Multiple sources example, version 1.0\n";
- return 0;
- }
- if (vm.count("include-path"))
- {
- cout << "Include paths are: "
- << vm["include-path"].as< vector<string> >() << "\n";
- }
- if (vm.count("input-file"))
- {
- cout << "Input files are: "
- << vm["input-file"].as< vector<string> >() << "\n";
- }
- cout << "Optimization level is " << opt << "\n";
- }
- catch(exception& e)
- {
- cout << e.what() << "\n";
- return 1;
- }
- return 0;
- }
|