ネタ元
まず、ふつーに、Cコンパイラの-Iオプションの如く、 -I <path> -I <path> とかやって複数の値を設定するのは下記でできます。
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/parsers.hpp>
#include <boost/program_options/variables_map.hpp>
int main(int c, char** v)
{
try {
namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
("include,I", po::value< std::vector<std::string> >(), "include paths")
;
po::variables_map vm;
po::store(po::parse_command_line(c, v, desc), vm);
po::notify(vm);
if (vm.count("include")) {
const std::vector< std::string >& v = vm["include"].as< std::vector< std::string > >();
std::copy(v.begin(),v.end(),std::ostream_iterator<std::string>(std::cout, ", "));
}
return 0;
} catch ( const std::exception& e ) {
std::cerr << e.what() << "\n";
return -1;
}
}
./exec -I a -I b で a, b が得られます。