Examples in this post:
- –input/-i and –output/-o, both strings, both required
- Single positional string argument
- A double-typed argument (with automatic type checking)
More examples will possibly be added in the future
Two arguments: –input/-i and –output/-o, both strings, both required
/** * Compile like this: g++ -o test test.cpp -lboost_program_options * Usage examples: * ./test -i infile.txt -o outfile.txt * ./test --input infile.txt --output outfile.txt */ #include <boost/program_options.hpp> #include <string> #include <iostream> namespace po = boost::program_options; int main(int argc, char** argv) { // Arguments will be stored here std::string input; std::string output; // Configure options here po::options_description desc ("Allowed options"); desc.add_options () ("help,h", "print usage message") ("input,i", po::value(&input), "Input file") ("output,o", po::value(&output), "Output file"); // Parse command line arguments po::variables_map vm; po::store (po::command_line_parser (argc, argv).options (desc).run (), vm); po::notify (vm); // Check if there are enough args or if --help is given if (vm.count ("help") || !vm.count ("input") || !vm.count ("output")) { std::cerr << desc << "\n"; return 1; } // Your code goes here }
Single positional string argument
/** * Compile like this: g++ -o test test.cpp -lboost_program_options * Usage examples: * ./test infile.txt * ./test --input infile.txt */ #include <boost/program_options.hpp> #include <string> #include <iostream> namespace po = boost::program_options; int main(int argc, char** argv) { // Arguments will be stored here std::string input; // NOTE: Declare the same option in both desc and positionals! // No normal options declared, only positionals! po::options_description desc ("Allowed options"); desc.add_options() ("help", "Print usage") ("input", po::value(&input), "Input file"); // Configure options here po::positional_options_description positionals; positionals.add("input", 1 /* 1 = max num of inputs ; -1: arbitrary number */); // Parse command line arguments po::variables_map vm; po::store (po::command_line_parser (argc, argv) .positional(positionals) .options(desc).run (), vm); po::notify (vm); // Check if there are enough args or if --help is given if (vm.count ("help") || !vm.count ("input")) { std::cerr << desc << "\n"; return 1; } // Your code goes here! std::cout << "Input is " << input << std::endl; }
A double-typed argument (with automatic type checking)
/** * Compile like this: g++ -o test test.cpp -lboost_program_options * Usage examples: * ./test -v 1.23 * This does not work * ./test -v ABC */ #include <boost/program_options.hpp> #include <string> #include <iostream> namespace po = boost::program_options; int main(int argc, char** argv) { // Arguments will be stored here double value; // Configure options here po::options_description desc ("Allowed options"); desc.add_options () ("help,h", "print usage message") ("value,v", po::value(&value), "The value"); // Parse command line arguments po::variables_map vm; po::store (po::command_line_parser (argc, argv).options (desc).run (), vm); po::notify (vm); // Check if there are enough args or if --help is given if (vm.count ("help") || !vm.count ("value")) { std::cerr << desc << "\n"; return 1; } // Your code goes here! std::cout << value << std::endl; }