一、gflags简单介绍

gflags是google开源的一套命令行参数解析工具。通常在项目开发中会有一种需求:

  1. 可以在代码运行的时候指定某些代码中某些参数的值
  2. 如果没有显式指定,这些参数可以使用默认的值

比如:服务器编程中需要用到IP和端口号。但是这两个变量有时候在具体使用程序的时候才会有具体的值,如果不用gflags可以这么写

//test.cc
#include <iostream>
#include <string>
//else header file#define LOG class Server{public:Server(const std::string& ip = "127.0.0.1" , uint16_t port = 8080) : _ip(ip), _port(port) {std::cout << "Init Server..." << std::endl;
#ifdef LOG std::cout << "ip  : " << _ip << std::endl;std::cout << "port: " << _port << std::endl;
#endifstd::cout << "Init OK!" << std::endl;}//else code
private:std::string _ip;uint16_t _port;//else code
};int main(int argc, char* argv[]) {Server *pserver;if(argc != 1) {pserver = new Server(argv[1], atoi(argv[2]));}else{pserver = new Server;}return 0;
}

编译:
g++ test.cc -o test -std=c++11
运行结果:

  • 使用默认值
  • 不使用默认值

如果用上gflags,请看二。

二、如何在代码中使用

还是上面那个情景,如果用gflags可以这么写:

//test2.cc
#include <iostream>
#include <string>
#include <gflags/gflags.h> //gflags库的头文件
//else header file#define LOGDEFINE_string(ip, "127.0.0.1", "IP address");
DEFINE_int32(port, 8080, "port");class Server{public:Server(const std::string& ip, uint16_t port) : _ip(ip), _port(port) {std::cout << "Init Server..." << std::endl;
#ifdef LOG std::cout << "ip  : " << _ip << std::endl;std::cout << "port: " << _port << std::endl;
#endifstd::cout << "Init OK!" << std::endl;}//else code
private:std::string _ip;uint16_t _port;//else code
};int main(int argc, char* argv[]) {gflags::ParseCommandLineFlags(&argc, &argv, true);  Server* pserver = new Server(FLAGS_ip, FLAGS_port);return 0;
}

编译:
g++ test2.cc -o test2 -lgflags -lpthread

注:为什么这么编译?请看三。

运行结果:

  • 使用默认值
  • 不使用默认值

    相信经过上面那个demo后,读者已经大致明白了这个库怎么用,我最后简单的说明几点:
  1. 使用前要先定义要使用的参数
    例如前面代码中的DEFINE_string(ip, "127.0.0.1", "IP address");,这个宏的三个参数分别是:要使用的参数名,参数的默认值,参数的说明。gflags支持以下参数类型:

    • DEFINE_bool: bool
    • DEFINE_int32: 32-bit integer
    • DEFINE_int64: 64-bit integer
    • DEFINE_uint64: unsigned 64-bit integer
    • DEFINE_double: double
    • DEFINE_string: C++ string
  2. 使用参数在参数名前加上FLAGS_
    例如前面代码中的FLAGS_ip

  3. 在main函数开始时要初始化gflags
    例如前面代码中的gflags::ParseCommandLineFlags(&argc, &argv, true);

三、如何编译使用gflags的代码

在编译的时候要加上-lgflags-lpthread,因为gflags内部是需要POSIX线程库支持的,所以还需要加上-lpthread
除了这两个外,也需要指定你安装的gflags的库文件(gcc选项:-L)和头文件(gcc选项:-I)。由于我把这两个放到了系统默认寻找的路径,所以在编译的时候没有显式指定。

gflags简明使用指南相关推荐

  1. cmake简明使用指南

    cmake简明使用指南 Last update 2018/8/8 先执行cmake生成makefile,然后看看里面的内容,(至少在ubuntu16.04上的cmake3.5.1上),有如下内容提供: ...

  2. BlockChain:《区块链世界简明生存指南(一块听听)》2017-06-06 李笑来—听课笔记分享(2)

    BlockChain:<区块链世界简明生存指南(一块听听)>2017-06-06 李笑来-听课笔记分享(2) 目录 1.第1部分 2.第2部分 3.第3部分 李笑来<李笑来 Pres ...

  3. WeUI 简明入门指南

    由于 WeUI 0.4.x 到 1.x 版本更新改动较大,所以本文仅适用于 0.4.x 版本,适用于 1.x 版本的入门指南请查看 WeUI 1.0 简明入门指南. 之前做智慧校园的时候想找一个开源的 ...

  4. FVWM简明使用指南

    http://minus273.eu/mirrors/2001315450/fvwm_frame.html 简明使用指南 Fvwm is a window manager for X11. It is ...

  5. BlockChain:《区块链世界简明生存指南(一块听听)》2017-06-06 李笑来—听课笔记分享(1)

    BlockChain:<区块链世界简明生存指南(一块听听)>2017-06-06 李笑来-听课笔记分享(1) 导读      李笑来是一位得到App专栏的作家,专栏<通往财富自由之路 ...

  6. FVWM 简明使用指南

    http://docs.huihoo.com/homepage/shredderyin/fvwm.html FVWM简明使用指南 Fvwm is a window manager for X11. I ...

  7. Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)

    一.安装配置Git 1. 注册 GitHub 账号,GitHub:GitHub: Where the world builds software · GitHub. 2. 在 Linux 中安装 gi ...

  8. 初创互联网公司简明创业指南 - YC新掌门Sam Altman

    本文只是一个创业指南的简明版 - 更详细的版本请查看:http://startupclass.samaltman.com 创业之前,你更应该去拥有一个好的创意,而不是一个公司.如果开始前你拥有一个好的 ...

  9. 有趣的机器学习:最简明入门指南

    转: http://blog.jobbole.com/67616/ 本文由 伯乐在线 - toolate 翻译.未经许可,禁止转载! 英文出处:medium.欢迎加入翻译组. 在听到人们谈论机器学习的 ...

  10. Linux 终端操作之简明疾速指南(1)

    作者: 路人张三 情由:aolinux.cn   阅读提醒:Linux 中的一切经管任务都可以在终端中完成.很多情况下,运用终端比运用图形化的措施更快捷,并且还能够完成非分出格的功用.不光如此,一切的 ...

最新文章

  1. 我在旷视研究院做检测 | 技术头条
  2. flask restful 模板
  3. phpcms v9整合Ueditor
  4. bat 域 本机管理员密码_域渗透——Local Administrator Password Solution
  5. UML 类之间的几种关系
  6. gradle 插件 自定义_Gradle自定义插件
  7. java struts 读取文件,Struts中读写文件的路径问题
  8. DeFi借贷协议FLUX和比原链(BTM)达成全面战略合作协议,支持BTM借贷及挖矿
  9. Android 网络评分机制
  10. 精美留言、评论框,带微博表情
  11. 粒子滤波算法理解及实现
  12. 修复计算机之后东西还在吗,硬盘分区表修复后文件还在吗
  13. word 任意页设置开始页码
  14. Python操作Excel表格(二)
  15. 如何删除联想lenovo硬盘的隐藏分区
  16. FPGA DDR2操作
  17. 第十七届中国计量大学程序设计竞赛 D Dessert Time
  18. 阿里云-Centos7安装Jenkins
  19. 一键分享怎么可以找回删除的照片小技巧
  20. 夜幕团队成员的工资究竟几 K ?

热门文章

  1. 现代管理学 罗珉 第三版
  2. 线性系统理论3 状态空间描述 方框图
  3. 转专业后的迷茫和开始——自学C语言之旅
  4. 支付宝支付模块-社区分享-接口样例-常见问题帖
  5. ignore的音标_单词ignore的音标_词典解释_翻译_相关例句_一直查
  6. Java人事管理系统设计
  7. 文电通:助力企业入局“无纸化办公”!
  8. 苹果手机连接电脑服务器传文件,实用!三种iPhone与Windows电脑互传文件操作技巧,...
  9. OSI七层网络协议归纳
  10. C语言学习-翁凯(第五章笔记)