class application_impl {
public:
application_impl():_app_options("Application Options"){
}
options_description _app_options;
options_description _cfg_options;
}
void application::set_program_options()
{
for(auto& plug : plugins) {
boost::program_options::options_description plugin_cli_opts("Command Line Options for " + plug.second->name());
boost::program_options::options_description plugin_cfg_opts("Config Options for " + plug.second->name());
plug.second->set_program_options(plugin_cli_opts, plugin_cfg_opts);
if(plugin_cfg_opts.options().size()) {
my->_app_options.add(plugin_cfg_opts);
my->_cfg_options.add(plugin_cfg_opts);
}
if(plugin_cli_opts.options().size())
my->_app_options.add(plugin_cli_opts);
}
options_description app_cfg_opts( "Application Config Options" );
options_description app_cli_opts( "Application Command Line Options" );
app_cfg_opts.add_options()
("plugin", bpo::value< vector<string> >()->composing(), "Plugin(s) to enable, may be specified multiple times");
app_cli_opts.add_options()
("help,h", "Print this help message and exit.")
("version,v", "Print version information.")
("full-version", "Print full version information.")
("print-default-config", "Print default configuration template")
("data-dir,d", bpo::value<std::string>(), "Directory containing program runtime data")
("config-dir", bpo::value<std::string>(), "Directory containing configuration files such as config.ini")
("config,c", bpo::value<std::string>()->default_value( "config.ini" ), "Configuration file name relative to config-dir")
("logconf,l", bpo::value<std::string>()->default_value( "logging.json" ), "Logging configuration file name/path for library users");
my->_cfg_options.add(app_cfg_opts);
my->_app_options.add(app_cfg_opts);
my->_app_options.add(app_cli_opts);
}
- help:直接输出_app_options配置项的全部内容。
- version:输出 application实例的类成员_version的值。
- print-default-config: 与_app_options无关,重新到每个plugin中找配置,然后基于_cfg_options生成一份默认的config 配置,并打印到终端界面。
- data-dir:设置data目录的命令,保存在application的类成员_data_dir 中。
- config-dir:设置config路径,保存在类成员_config_dir 中。
- logconf:默认是 logging.json,放置在config目录下面,可自定义设置,保存在类成员_logging_conf中。
- config:指定配置文件的名字,默认是config.ini。如果发现在config目录下找到config.ini文件,则按照该文件的配置载入。