Gflags简单使用

简介

GFlags是Google开源的一套命令行参数处理的开源库,不同于getopt(),gflags的flags可以分散到各个源文件,也就是说只要是和定义了指定flags的源文件链接的其他文件都可以使用这个flags。很强大

Gflags的定义

1.首先必须包含头文件

#include <gflags/gflags.h>

2.支持以下数据类型

DEFINE_bool: 布尔类型
DEFINE_int32: 32-bit 整型
DEFINE_int64: 64-bit 整型
DEFINE_uint64: 无符号 64-bit 整型
DEFINE_double: double
DEFINE_string: C++ string

3.定义方式如下

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing"); 
DEFINE_bool(str, "hello word", ""); 

该宏的三个参数含义分别为命令行参数名,参数默认值,以及参数的帮助信息。

Gflags的使用

当参数被定义后,通过FLAGS_name就可访问到对应的参数。

if (FLAGS_big_menu)
     FLAGS_big_menu = false; 

以上的访问方式,仅在参数定义和访问在同一个文件(或是通过头文件包含)时,FLAGS_name才能访问到参数,如果要访问其他文件里定义的参数,则需要使用DECLARE_type。

DECLARE_type如何使用?

使用 DECLARE_,它的作用就相当于用 extern 声明变量。
推荐在 .cpp 文件中 DEFINE 变量,然后只在对应 .h 中 DECLARE 变量。

例如,在 sby.cpp定义了一个 gflags 变量 DEFINE_string(name, ‘sby’, ‘’),假如你需要在其他文件中使用该变量,那么在 sby.h 中声明 DECLARE_string(name),然后在想使用该变量的文件中 include “sby.h” 就可以。当然不一定非要这么规范,但是建议规范一点。

DECLARE_bool(big_menu);
DECLARE_string(str);

设置flag

我们可以通过ParseCommandLineFlags函数来通过给可执行文件传输命令行参数的方式去修改flag的值。

gflags::ParseCommandLineFlags(&argc, &argv, true);

其中第三个参数为remove_flag,如果为true,gflags会移除parse过的参数,否则gflags就会保留这些参数,但可能会对参数顺序进行调整。

传参格式可如下:当运行ParseCommandLineFlags时,会将设置FLAGS_big_menu设置为false,FLAGS_str 设置为为"kun ni tai mei" 。

./可执行文件 --big_menu=false --hobby="kun ni tai mei" 

对于str标记还有如下指定方式

./可执行文件 --hobby="kun ni tai mei"
./可执行文件 -hobby="kun ni tai mei"
./可执行文件 --hobby "kun ni tai mei"
./可执行文件 -hobby "kun ni tai mei"

对于布尔变量有下述几种设置方式:

./可执行文件 --big_menu
./可执行文件 --nobig_menu
./可执行文件 --big_menu=true
./可执行文件 --big_menuf=alse

总结

文章为gfalgs的基础用法,更详细内容请参考文档

官方文档

祝愿大家天天开心!

猜你喜欢

转载自blog.csdn.net/Done_for_me/article/details/130201182