summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/program_options/example/multiple_sources.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/program_options/example/multiple_sources.cpp')
-rw-r--r--src/boost/libs/program_options/example/multiple_sources.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/boost/libs/program_options/example/multiple_sources.cpp b/src/boost/libs/program_options/example/multiple_sources.cpp
new file mode 100644
index 00000000..22c8235b
--- /dev/null
+++ b/src/boost/libs/program_options/example/multiple_sources.cpp
@@ -0,0 +1,121 @@
+// 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;
+}