gflags是什么:
gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。
gflags使用起来比getopt方便,但是不支持参数的简写(例如getopt支持--list缩写成-l,gflags不支持)。

如何安装使用gflags:
安装:请访问地址 https://code.google.com/p/gflags/,下载最新版的gflags,编译安装。
使用:
1.首先需要include "gflags.h"
#include <gflags/gflags.h>

2.将需要的命令行参数使用gflags的宏:DEFINE_xxxxx(变量名,默认值,help-string) 定义在文件当中,注意全局域哦。gflags支持以下类型:

DEFINE_bool: booleanDEFINE_int32: 32-bit integerDEFINE_int64: 64-bit integerDEFINE_uint64: unsigned 64-bit integerDEFINE_double: doubleDEFINE_string: C++ string

3.在main函数中加入:

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

argc和argv想必大家都很清楚了,说明以下第三个参数的作用:

如果设为true,则该函数处理完成后,argv中只保留argv[0],argc会被设置为1。

如果为false,则argv和argc会被保留,但是注意函数会调整argv中的顺序。

4.这样,在后续代码中可以使用FLAGS_变量名访问对应的命令行参数了

printf("%s", FLAGS_mystr);

5.最后,编译成可执行文件之后,用户可以使用:executable --参数1=值1 --参数2=值2 ... 来为这些命令行参数赋值。

./mycmd --var1="test" --var2=3.141592654 --var3=32767 --mybool1=true --mybool2 --nomybool3
这里值得注意的是bool类型命令行参数,除了可以使用--xxx=true/false之外,还可以使用--xxx和--noxxx后面不加等号的方式指定true和false
gflags进阶使用:
1.在其他文件中使用定义的flags变量:有些时候需要在main之外的文件使用定义的flags变量,这时候可以使用宏定义DECLARE_xxx(变量名)声明一下(就和c++中全局变量的使用是一样的,extern一下一样)
DECLARE_bool: boolean
DECLARE_int32: 32-bit integer
DECLARE_int64: 64-bit integer
DECLARE_uint64: unsigned 64-bit integer
DECLARE_double: double
DECLARE_string: C++ string

在gflags的doc中,推荐在对应的.h文件中进行DECLARE_xxx声明,需要使用的文件直接include就行了。

 2.检验输入参数是否合法:gflags库支持定制自己的输入参数检查的函数,如下:

static bool ValidatePort(const char* flagname, int32 value) {if (value > 0 && value < 32768)   // value is okreturn true;printf("Invalid value for --%s: %d\n", flagname, (int)value);return false;
}
DEFINE_int32(port, 0, "What port to listen on");
static const bool port_dummy = RegisterFlagValidator(&FLAGS_port, &ValidatePort);

3.判断flags变量是否被用户使用:在gflags.h中,还定义了一些平常用不到的函数和结构体。这里举一个例子,判断参数port有没有被用户设定过

 google::CommandLineFlagInfo info;if(GetCommandLineFlagInfo("port" ,&info) && info.is_default) {FLAGS_port = 27015;}

4.定制你自己的help信息与version信息:(gflags里面已经定义了-h和--version,你可以通过以下方式定制它们的内容)

version信息:使用google::SetVersionString设定,使用google::VersionString访问
help信息:使用google::SetUsageMessage设定,使用google::ProgramUsage访问
注意:google::SetUsageMessage和google::SetVersionString必须在google::ParseCommandLineFlags之前执行

参考:

  • https://code.google.com/p/gflags/
  • https://gflags.googlecode.com/git-history/master/doc/gflags.html#flagfiles

转载于:https://www.cnblogs.com/SarahLiu/p/7121385.html

[转]Google gflags使用说明相关推荐

  1. Google gflags使用说明

    gflags是什么: gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt. gflags使用起来比getopt方便,但是不支持参数的简 ...

  2. 修复GRUB [转]

    自打开始用grub,便对其产生了一定的依赖,当然也碰到过没有显示grub选项条的现象,也曾迷茫过,今天见高手几条命令就把我多日以来的问题搞定了,心里不由得一喜,网上查了下,下面转个文章供参考... 用 ...

  3. 收藏一篇访谈并做笔记:《[独家]与周鸿祎谈乔布斯》

    五点第一觉醒来,看到Apple4us上的一篇访谈<[独家]与周鸿祎谈乔布斯>,通读下来,甚是喜欢.周鸿祎的每一个回答我都非常认同,也想到了一些自己正在做的事,错误与正确.同时,这让我对周鸿 ...

  4. [交流]我是怎样看大片学英语的(你可能知道,给不知到的人写的)

    [交流]我是怎样看大片学英语的(你可能知道,给不知到的人写的) 你也许想找FRIENDS或成长的烦恼之类的视频学习英语.其实根本不用局限于此.下面我就说说我用的方法. 你可以到 http://www. ...

  5. [转]即时通信-socket

    原文地址:[转]即时通信-socket 作者:竹林沉雪 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览 器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ ...

  6. Google Gflags使用

    Google Gflags可以用于参数传递,它是以全局变量的形式进行参数传递,即代码中任何一处都可以调用到它.同时它也提供规范化的参数解析,可以用于主函数的传参. 定义 #include <gf ...

  7. [Linux]从控制台一次读取一个字符,无需等待回车键

    [Linux]从控制台一次读取一个字符,无需等待回车键 周银辉 读取字符嘛,可以使用getchar(),getch()等等函数,但它们都需要等待回车键以结束输入,而不是按下键盘时立即响应,看上去不那么 ...

  8. 如何理解:先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法,即对于机器数为负数,则有[X]原=[[X]补]补。

    对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法,即对于机器数为负数,则有[X]原=[[X]补]补. 当然你也可以用先减1后取反的方法来求补码对应的原码. 对于求 ...

  9. 开源的悲哀——袁萌100天变身实录[2]

    承接上文:开源的悲哀--袁萌100天变身实录[1] 2008年2月末:赤裸裸的微软支持者! 2008年2月29日是ISO为OOXML设置"快速通道"的投票日,因此2月下旬成为OOX ...

  10. 中职计算机应用基础每章知识点,[定稿]中职计算机应用基础教案_1-5章V3.1

    <[定稿]中职计算机应用基础教案_1-5章.doc>由会员分享,可免费在线阅读全文,更多与<[定稿]中职计算机应用基础教案_1-5章(V3.1)>相关文档资源请在帮帮文库(ww ...

最新文章

  1. Python 闭包、单个装饰器、多个装饰器、装饰器修饰类、应用场景
  2. 【前沿技术】2021年AI将改变制造业的6大应用趋势
  3. leetcode 64. 最小路径和
  4. [Linux主机] 优化你的php-fpm(php5.3+)让你的网站跑得更快
  5. Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
  6. centos7 mysql数据库安装和配置
  7. 先学python还是ros_ROS入门学习
  8. PyTorch入门-语言模型
  9. mac securecrt无法记住密码的解决方法
  10. 3.1 栈—栈的存储实现和运算实现
  11. 苹果cms V10模板 仿挖片自适应电影模板
  12. layui 之 laypage分页插件
  13. stm32无源蜂鸣器定时器_STM32与无源蜂鸣器
  14. CMake中cmake_minimum_required的使用
  15. 程序员的而立之年,迷茫之年
  16. 贝叶斯分类器(贝叶斯决策论,极大似然估计,朴素贝叶斯分类器,半朴素贝叶斯分类器,贝叶斯网)学习笔记
  17. Android之图片压缩
  18. java详细安装教程一一java(jdk)安装
  19. DDR2/3进阶实验测试篇
  20. text函数提取年月

热门文章

  1. elastic search中父子关系文档
  2. PHP微信公众号网页授权获取用户基本信息
  3. 评论:银行凭什么让副部级以上干部透支300万
  4. VRRP实验(eNSP)
  5. 高职技能考试计算机专业,计算机应用技术专业(四川托普信息技术职业学院计算机系各专业2020年高职单招技能测试大纲(中职类))...
  6. 国家扶持政策申报会注重于哪几个方面?丨创成汇
  7. uos-20sp1 龙芯系统 编译51版本火狐浏览器,公司有npapi插件 52版本后不支持
  8. 我要自学网视频教程ajax,这么逆天的自学网站,还是第一次见,难怪考不上清华北大...
  9. Item 30: Familiarize yourself with perfect forwarding failure cases.
  10. 10-基于Xgboost的糖尿病分类任务实战