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