你如何处理命令行选项和配置文件?

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它们.对测试也有很好的支持,因此单元测试可以独立设置不同的标志.


Chr*_*ris 6

对于命令行和C++,我一直是TCLAP的粉丝:Templatized Command Line Argument Parser.

http://sourceforge.net/projects/tclap/


rlb*_*ond 5

好吧,你不会喜欢我的回答.我用boost::program_options.界面需要一些习惯,但是一旦你把它弄下来,它就太棒了.只需确保对单元测试进行大量测试,因为如果语法错误,则会出现运行时错误.

并且,是的,我将它们存储在单个对象中(只读).在这种情况下,我不认为这是邪恶的.这是我能想到的单身人士可以接受的少数案例之一.