gflags简明使用指南
一、gflags简单介绍
gflags是google开源的一套命令行参数解析工具。通常在项目开发中会有一种需求:
- 可以在代码运行的时候指定某些代码中某些参数的值
- 如果没有显式指定,这些参数可以使用默认的值
比如:服务器编程中需要用到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后,读者已经大致明白了这个库怎么用,我最后简单的说明几点:
使用前要先定义要使用的参数
例如前面代码中的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
使用参数在参数名前加上
FLAGS_
例如前面代码中的FLAGS_ip
。在main函数开始时要初始化gflags
例如前面代码中的gflags::ParseCommandLineFlags(&argc, &argv, true);
。
三、如何编译使用gflags的代码
在编译的时候要加上-lgflags
和-lpthread
,因为gflags内部是需要POSIX线程库支持的,所以还需要加上-lpthread
。
除了这两个外,也需要指定你安装的gflags的库文件(gcc选项:-L
)和头文件(gcc选项:-I
)。由于我把这两个放到了系统默认寻找的路径,所以在编译的时候没有显式指定。
gflags简明使用指南相关推荐
- cmake简明使用指南
cmake简明使用指南 Last update 2018/8/8 先执行cmake生成makefile,然后看看里面的内容,(至少在ubuntu16.04上的cmake3.5.1上),有如下内容提供: ...
- BlockChain:《区块链世界简明生存指南(一块听听)》2017-06-06 李笑来—听课笔记分享(2)
BlockChain:<区块链世界简明生存指南(一块听听)>2017-06-06 李笑来-听课笔记分享(2) 目录 1.第1部分 2.第2部分 3.第3部分 李笑来<李笑来 Pres ...
- WeUI 简明入门指南
由于 WeUI 0.4.x 到 1.x 版本更新改动较大,所以本文仅适用于 0.4.x 版本,适用于 1.x 版本的入门指南请查看 WeUI 1.0 简明入门指南. 之前做智慧校园的时候想找一个开源的 ...
- FVWM简明使用指南
http://minus273.eu/mirrors/2001315450/fvwm_frame.html 简明使用指南 Fvwm is a window manager for X11. It is ...
- BlockChain:《区块链世界简明生存指南(一块听听)》2017-06-06 李笑来—听课笔记分享(1)
BlockChain:<区块链世界简明生存指南(一块听听)>2017-06-06 李笑来-听课笔记分享(1) 导读 李笑来是一位得到App专栏的作家,专栏<通往财富自由之路 ...
- FVWM 简明使用指南
http://docs.huihoo.com/homepage/shredderyin/fvwm.html FVWM简明使用指南 Fvwm is a window manager for X11. I ...
- Linux 系统使用 git 提交代码-- git 的安装及使用(简明教学指南)
一.安装配置Git 1. 注册 GitHub 账号,GitHub:GitHub: Where the world builds software · GitHub. 2. 在 Linux 中安装 gi ...
- 初创互联网公司简明创业指南 - YC新掌门Sam Altman
本文只是一个创业指南的简明版 - 更详细的版本请查看:http://startupclass.samaltman.com 创业之前,你更应该去拥有一个好的创意,而不是一个公司.如果开始前你拥有一个好的 ...
- 有趣的机器学习:最简明入门指南
转: http://blog.jobbole.com/67616/ 本文由 伯乐在线 - toolate 翻译.未经许可,禁止转载! 英文出处:medium.欢迎加入翻译组. 在听到人们谈论机器学习的 ...
- Linux 终端操作之简明疾速指南(1)
作者: 路人张三 情由:aolinux.cn 阅读提醒:Linux 中的一切经管任务都可以在终端中完成.很多情况下,运用终端比运用图形化的措施更快捷,并且还能够完成非分出格的功用.不光如此,一切的 ...
最新文章
- 我在旷视研究院做检测 | 技术头条
- flask restful 模板
- phpcms v9整合Ueditor
- bat 域 本机管理员密码_域渗透——Local Administrator Password Solution
- UML 类之间的几种关系
- gradle 插件 自定义_Gradle自定义插件
- java struts 读取文件,Struts中读写文件的路径问题
- DeFi借贷协议FLUX和比原链(BTM)达成全面战略合作协议,支持BTM借贷及挖矿
- Android 网络评分机制
- 精美留言、评论框,带微博表情
- 粒子滤波算法理解及实现
- 修复计算机之后东西还在吗,硬盘分区表修复后文件还在吗
- word 任意页设置开始页码
- Python操作Excel表格(二)
- 如何删除联想lenovo硬盘的隐藏分区
- FPGA DDR2操作
- 第十七届中国计量大学程序设计竞赛 D	Dessert Time
- 阿里云-Centos7安装Jenkins
- 一键分享怎么可以找回删除的照片小技巧
- 夜幕团队成员的工资究竟几 K ?
热门文章
- 现代管理学 罗珉 第三版
- 线性系统理论3 状态空间描述 方框图
- 转专业后的迷茫和开始——自学C语言之旅
- 支付宝支付模块-社区分享-接口样例-常见问题帖
- ignore的音标_单词ignore的音标_词典解释_翻译_相关例句_一直查
- Java人事管理系统设计
- 文电通:助力企业入局“无纸化办公”!
- 苹果手机连接电脑服务器传文件,实用!三种iPhone与Windows电脑互传文件操作技巧,...
- OSI七层网络协议归纳
- C语言学习-翁凯(第五章笔记)