我做了一些查找,有很多用于命令行选项解析的库,但是很难区分它们。有没有人有任何经验?一个比其他任何一个更难/更好/更快/更容易/无论如何?还是我应该自己种?
6 回答
如果你想要完全跨平台的东西,我发现Boost::Program_Options库非常好。设置它有一些学习曲线,但一旦你掌握了它,它就会大大简化事情。
出于许多目的,GNUgetopt()
和getopt_long()
函数都是不错的选择。
GNUgetopt()
用于单字母选项参数,并且非常接近 POSIX 标准行为,并且可以通过设置环境变量 POSIXLY_CORRECT 来说服其行为更加正统。不同之处在于 GNUgetopt()
在第一个非选项参数之后识别选项参数,并对参数进行置换,以便在任何非选项参数之前处理所有选项参数。这有时很重要——尽管上下文往往有点深奥。还有一些其他额外的技巧可用。
GNUgetopt_long()
是处理长选项的最佳机制,例如--help
. 它可以处理可选参数、匹配单字母选项和各种事情。
还有许多其他可用的包以各种方式处理选项。
(Perl 有大量的 Getopt 模块,这反映了这些年来付出了多少努力。)
您可能会在什么是 Unix shell 命令的一般语法中找到一些有用的额外信息。您还可以在实用程序约定一章中阅读有关命令行约定的 POSIX 规范。
boost::program_options非常好,并且有一个很好的 C++ 接口,可以检查选项参数是否具有某种类型(如“int”)并将它们直接存储到变量中。
它还支持从配置文件加载“选项”,因此您可以免费获得配置文件解析器。通过这种方式,您可以非常轻松地允许从命令行覆盖所有配置设置或将所有命令行选项添加到配置文件中,这使得它非常灵活。
还有popt。
如果您使用的是 linux/unix,那么getopt是适合您的选项解析器。适用于几乎所有类型的 unix,并且易于使用
对于大多数事情,我使用 getopt_long() 的系统实现,但是您可能需要更便携,这禁止使用这种 POSIX 生物舒适。
如果您处于 getopt() / getopt_long() 不可用并且需要自己滚动的位置,这里是关于命令行选项的 POSIX 视图的标准。您可能还想看看 POSIX 对帮助/选项摘要显示的看法(我找不到指向该标准部分的链接)。
就个人而言,我不喜欢使用不带 --long-options 的程序,因为记住短选项很痛苦,而且没有两个程序使用相同的选项。