如何使用命令行解析器库对类别中的选项进行分组?

时间:2012-10-05 22:30:52

标签: c++ parsing options

我正在研究一个框架,我一直在使用TCLAP来处理命令行选项。调用程序help时,我想打印自动分组的参数用法。输出示例如下:

$ ./program help

Learning Options
    -t          Train mode
    -neg        Specifies the path for the negative examples
    -pos        Specifies the path for the positive examples

Detection Options
    -d          Detection mode
    -param      Parameters file path
    -o          Output folder
    -track      Enables tracking

Feature Extraction Options
    -w          Window size
    -feat       Feature type. Available: SIFT and SURF.

我一直在寻找TCLAP's documentation,但没有找到任何东西。我还在调查StackOverflow post。我发现libobj似乎是这样做的,但并不完全清楚。

我如何使用TCLAP做到这一点?如果不可能,我可以使用另一个图书馆吗?

奖金 - 小型图书馆,例如TCLAP: - )

2 个答案:

答案 0 :(得分:4)

  

我可以使用另一个图书馆吗?

您可以使用Boost.Program_options库。它相对较小(在Fedora 17上为370k)。

可以找到一个示例here

namespace po = boost::program_options;
// Declare the supported options.
po::options_description desc("Allowed options");
desc.add_options()
    ("help", "produce help message")
    ("compression", po::value<int>(), "set compression level")
;

po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);    

if (vm.count("help")) {
    cout << desc << "\n";
    return 1;
}

if (vm.count("compression")) {
    cout << "Compression level was set to " 
 << vm["compression"].as<int>() << ".\n";
} else {
    cout << "Compression level was not set.\n";
}

答案 1 :(得分:2)

您可以使用Gengetopt和getopt库。它包含一个text命令,允许您插入分组标题。一个好处是,它支持命令行args的GNU约定,很多人都知道。