使用boost::program_options分析前缀参数



我需要解析前缀为boost::program_options的参数,比如-O1/-O2/-O3,所以-O是前缀,后面是优化级别作为数字。

它是使用LLVM命令行支持声明的,我需要喜欢它:

  cl::opt<char>
     OptLevel("O",
         cl::desc("Optimization level. [-O0, -O1, -O2, or -O3] "
                  "(default = '-O2')"),
         cl::Prefix,
         cl::ZeroOrMore,
         cl::init(' '));

这是我的想法:注意po::command_line_style::short_allow_adjacent:的使用

#include <boost/program_options.hpp>
#include <iostream>
namespace po = boost::program_options;
int main(int argc, char** argv)
{
    int opt;
    po::options_description desc("Allowed options");
    desc.add_options()
        ("help", "produce help message")
        ("optimization,O", po::value<int>(&opt)->default_value(1), "optimization level")
        ("include-path,I", po::value< std::vector<std::string> >(), "include path")
        ("input-file", po::value< std::vector<std::string> >(), "input file")
        ;
    po::variables_map vm;
    po::store(
            po::parse_command_line(argc, argv, desc, 
                po::command_line_style::allow_dash_for_short |
                po::command_line_style::allow_long |
                po::command_line_style::long_allow_adjacent |
                po::command_line_style::short_allow_adjacent | 
                po::command_line_style::allow_short
            ),
            vm);
    po::notify(vm);
    if (vm.count("help")) {
        std::cout << desc << "n";
        return 1;
    }
    std::cout << "Optimization level chosen: " << opt << "n";
}

在Coliru上直播

所以

./a.out -O23
./a.out -O 4
./a.out -I /usr/include -I /usr/local/include
./a.out --optimization=3

打印

Optimization level chosen: 23
Optimization level chosen: 4
Optimization level chosen: 1
Optimization level chosen: 3

最新更新