GFlags
GFlags 是 Google 开源的一个命令行 flag 库。与 getopt 之类不同,flag 的定义可以散布在各个源码中,而不用放在一起。一个源码文件可以定义一些它自己的flag,链接了该文件的应用都能使用这些flag,这样就能方便地复用代码。但要注意,如果不同的文件定义了相同的 flag,链接时会报错。
样例代码参见 GitHub/Cpp-Practice-Test/gflags_test
定义 Flag
使用 gflags 需要包含头文件#include <gflags/gflags.h>
,支持的类型有:
DEFINE_bool
: booleanDEFINE_int32
: 32-bit integerDEFINE_int64
: 64-bit integerDEFINE_uint64
: unsigned 64-bit integerDEFINE_double
: doubleDEFINE_string
: C++ string
该宏的三个参数分别代表命令行参数名,参数默认值,参数的帮助信息。
gflags 不支持列表,但可以借助 string 实现。
在头文件使用DECLARE_type
声明 flag,在对应源文件使用DEFINE_type
定义,则 include 头文件后即可使用。
使用 Flag
定义的 flag 可以像正常的变量一样使用,只需在前面加上FLAGS_
前缀。
验证 Flag
DEFINE 一个 flag 后,可以给其注册一个验证函数。
宏DEFINE_validator
调用函数RegisterFlagValidator()
,并返回注册是否成功。
如果ParseCommandLineFlags()
时参数不合法,则报错。
改变 Flag 默认值
只需要在调用ParseCommandLineFlags()
之前将 flag 赋值为需要的默认值即可。
或者使用SetCommandLineOption(const char* name, const char* value)
将 value 对应的值赋给 FLAGS_name。