gflags

0.官方文档

https://gflags.github.io/gflags/

1.背景介绍

google开源的gflags是一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags支持从命令行参数、环境变量以及配置文件读取参数。同时,可以在单个源代码文件中定义flags参数,不局限于main()函数所在文件,更加灵活。

2.使用方法

(1)支持的数据类型

DEFINE_bool: boolean    // 会进行数据类型的校验

DEFINE_int32: 32-bit integer

DEFINE_uint32: unsigned 32-bit integer

DEFINE_int64: 64-bit integer

DEFINE_uint64: unsigned 64-bit integer

DEFINE_double: double

DEFINE_string: C++ string

DEFINE_bool: boolean    // 会进行数据类型的校验

DEFINE_int32: 32-bit integer

DEFINE_uint32: unsigned 32-bit integer

DEFINE_int64: 64-bit integer

DEFINE_uint64: unsigned 64-bit integer

DEFINE_double: double

DEFINE_string: C++ string

(2)使用方式

#include <gflags/gflags.h>

 

a.只在当前原文件中使用

DEFINE_bool(test_enable, false, "test func enable");
DEFINE_string(var_name, "default value", "help message about this variable");
// 获取变量
FLAGS_test_enable
FLAGS_var_name

 

b.在其他文件中使用

DECLARE_bool(test_enable)
DECLARE_string(var_name)

 

注:在多个文件中使用时, 可以将声明部分放在.h中,便于管理维护

(3)flags导入方式

// 通过命令行指定

-test_string=string_value

-test_bool=true

// 通过文件指定

-flagfile=file_path

注:按顺序加载,同名flags,以最后一次出现的值为准

(4)gflags参数加载

uint32 ParseCommandLineFlags(int* argc, char*** argv, bool remove_flags);

uint32 ParseCommandLineNonHelpFlags(int* argc, char*** argv, bool remove_flags);

通过指定第三个参数remove_flags控制argv中flags参数所处位置以及argc的值;

  • remove_flags为true:  从argv中去除flags参数,只保留命令行参数
  • remove_flags为false:  调整argv中参数的顺序,gflags参数在前,命令行参数在后;同时,返回值为第一个命令行参数下标

(5)gflags参数修改

a.在调用解析函数通过FLAGS_flags_name直接修改

FLAGS_test_enable = true;

b.调用对应函数修改

std::string SetCommandLineOption (const char* name, const char* value);

std::string SetCommandLineOptionWithMode(const char* name, const char* value, FlagSettingMode set_mode);

可以通过以下方式,设置参数的合法检测

DEFINE_int32(test_int32, 0"test_int32 value");

DEFINE_validator(test_int32, &ValidateTestInt32);

  •     静态初始化时,检测失败  => 直接exit
  •     动态修改值时,检测失败  => 继续使用原值

(6)一些特殊的gflags参数

-help / -helpfull    // 展示所有flags的全部信息(name、value、comment)

-helpxml             // 内容与-help相同,只不过是以xml的格式输出

-helpon=FILE         // FILE.*

-helpmatch=S         // *S*.*

-version             // 可执行文件的版本,void SetVersionString(const string& version)

-helpshort           // 仅显示有关此程序的主模块的帮助,需要调用在解析前调用void SetUsageMessage(const string& usage);

 

-undefok=name1,name2

 

-fromenv=name1,name2

-tryfromenv=name1,name2

-flagfile=file_path

(7)补充说明

#define STRIP_FLAG_HELP 1  // 从编译源去除help message

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值