【发布时间】:2012-12-07 00:29:16
【问题描述】:
假设我有一个可执行文件(在 mac、win 和 linux 上运行)
a.out [-a] [-b] [-r -i <file> -o <file> -t <double> -n <int> ]
[ ] 中的参数表示它是可选的。但是,如果设置了最后一个参数 -r,则还必须提供 -i、-o、-t 和 -n。
有很多优秀的 C++ 库可以解析命令行参数,例如gflags (http://code.google.com/p/gflags/)、tclap (http://tclap.sourceforge.net/)、simpleopt(http://code.jellycan.com/simpleopt/)、boost.program_options (http://www.boost.org/doc/libs/1_52_0/doc/html/program_options.html) 等。但我想知道是否有一个可以让我直接编码参数之间的这些条件关系,无需手动编码错误处理
if ( argR.isSet() && ( ! argI.isSet() || ! argO.isSet() || ... ) ) ...
并手动设置--help。
库tclap 允许异或参数,例如允许使用 -a 或 -b,但不能同时使用两者。所以,在那个术语中,参数的 AND 会很好。
有人知道可以做到这一点的多功能、轻量级和跨平台库吗?
【问题讨论】:
-
Here 是 Boost.Program_options 中处理冲突和依赖选项的示例。
标签: c++ command-line terminal command-line-arguments