Fra*_*ank 11 c++ command-line options configuration-files configuration-management
您使用什么包来处理命令行选项,设置和配置文件?
我正在寻找从命令行和/或配置文件中读取用户定义选项的东西.
选项(设置)应该可以分为不同的组,以便我可以将不同的(子集)选项传递给我的代码中的不同对象.
我知道boost::program_options
,但我不太习惯API
.有轻量的替代品吗?
(顺便说一句,您是否在代码中使用了可以从任何地方读取的全局选项对象?或者您会认为这是邪恶的吗?)
alb*_*rtb 11
在谷歌,我们使用gflags.它不执行配置文件,但对于标志,它比使用getopt要痛苦得多.
#include <gflags/gflags.h>
DEFINE_string(server, "foo", "What server to connect to");
int main(int argc, char* argv[]) {
google::ParseCommandLineFlags(&argc, &argv, true);
if (!server.empty()) {
Connect(server);
}
}
Run Code Online (Sandbox Code Playgroud)
您将DEFINE_foo
文件放在需要知道标志值的文件的顶部.如果其他文件也需要知道该值,则使用DECLARE_foo
它们.对测试也有很好的支持,因此单元测试可以独立设置不同的标志.
对于命令行和C++,我一直是TCLAP的粉丝:Templatized Command Line Argument Parser.
http://sourceforge.net/projects/tclap/
好吧,你不会喜欢我的回答.我用boost::program_options
.界面需要一些习惯,但是一旦你把它弄下来,它就太棒了.只需确保对单元测试进行大量测试,因为如果语法错误,则会出现运行时错误.
并且,是的,我将它们存储在单个对象中(只读).在这种情况下,我不认为这是邪恶的.这是我能想到的单身人士可以接受的少数案例之一.