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
|
(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导入方式
|
注:按顺序加载,同名flags,以最后一次出现的值为准
(4)gflags参数加载
|
通过指定第三个参数remove_flags控制argv中flags参数所处位置以及argc的值;
- remove_flags为true: 从argv中去除flags参数,只保留命令行参数
- remove_flags为false: 调整argv中参数的顺序,gflags参数在前,命令行参数在后;同时,返回值为第一个命令行参数下标
(5)gflags参数修改
a.在调用解析函数前通过FLAGS_flags_name直接修改
|
b.调用对应函数修改
|
可以通过以下方式,设置参数的合法检测
|
- 静态初始化时,检测失败 => 直接exit
- 动态修改值时,检测失败 => 继续使用原值
(6)一些特殊的gflags参数
|
(7)补充说明
|