提升程序选项 - 解析命令行时崩溃

时间:2013-07-07 18:55:10

标签: c++ boost boost-program-options

我有以下的boost :: program_options程序。

boost::program_options::options_description opts("Allowed options");
opts.add_options()
    ("help", "produce help message"),
    ("mingw", boost::program_options::value<std::string>(), "Set the install path for MinGW"),
    ("triple", boost::program_options::value<std::string>(), "Set the target triple"),
    ("output", boost::program_options::value<std::string>(), "Set the output file"),
    ("input", boost::program_options::value<std::vector<std::string>>(), "Set an input file."),
    ("include", boost::program_options::value<std::vector<std::string>>(), "Set an include path.")
;

boost::program_options::positional_options_description posopts;
posopts.add("input", -1);

boost::program_options::variables_map vm;
try {
    boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(opts).positional(posopts).run(), vm);
} catch(std::exception& e) {
    std::cout << e.what();
    std::cin.get();
}
boost::program_options::notify(vm);

if (vm.find("help") != vm.end()) {
    std::cout << opts << "\n";
    std::cin.get();
    return 1;
}
// Actual program logic

但是,当我在命令行中指定--mingw="stuff"时,我发现它被拒绝了。发出--help命令后,似乎只有列表中选项的第一个选项实际上已经注册opts - 即使以这种方式链接它也是教程推荐的。

这个简单的示例程序出了什么问题?它基本上直接来自教程。

2 个答案:

答案 0 :(得分:12)

查看教程,我看不到选项之间的逗号。即:

desc.add_options()
    ("help", "produce help message")  // no comma here!
    ("compression", po::value<int>(), "set compression level")
;

尝试删除每个选项末尾的逗号。

答案 1 :(得分:0)

我在使用打开SUSE Leap 42.2的boost_1_63时遇到了同样的问题。使用./b2 .... - build-type = complete 重新编译所有提升库并重新安装问题不再显示。希望这对至少有些人有帮助。