用Google的gflags解析命令行参数
来源:互联网 发布:淘宝的情侣装店铺推荐 编辑:程序博客网 时间:2024/05/22 14:40
写了这么多年的Linux下C/C++代码,一直使用getopt_long来解析命令行参数,同时定义一个全局的struct来保存各个命令行参数的值。虽然用得比较“繁琐”,但也安于现状。最近突然发现了Google早在多年前就开源了一个解析命令行参数的“神器”gflags。赶紧来爽一把。
安装
1、去官网下载一个最新的版本(gflags-2.1.1.tar.gz)。
就是这么简单,安装成功了。值得注意的是,我这里新建了一个build文件夹,即采用“外部构建”的方式。这样编译过程中产生的中间文件(比如.o文件)就都放在build里,不会“污染”gflags源码,做到干干净净。
爽一把
1、既然安装好了,那赶紧来写个简单的代码来爽一把。话不多说,代码才是王道!
2、很明显,接下来就是要编译了。这里直接用g++写一行命令就可以编译了。但是既然学了cmake,那就“大材小用”一次吧。
3、那当然就是编译了
设定命令行参数
1、直接运行,得到的就是我们设定的默认参数。(聪明的你,结合代码一看,就知道参数的默认值是什么了)
2、设定参数值
i)可以用 –参数名=参数值 或者-参数名=参数值 的方式来设定参数值。
ii)对于bool类型的参数,除了上述方式外,还可以用 –参数名 的方式设定为true(即不带值), 使用–no参数名 的方式设定为false。为了统一,我建议都使用 上面的 第 i)种方法来设定参数。
3、从文件读入“命令行”参数
如果我们的程序比较牛逼,配置项非常多,也就是说命令行参数很多,那你每次启动都要一个一个的输入,那岂不是很麻烦?gflags已经帮我们解决了,用 –flagfile=命令行文件 的方式就可以了。你接着往下看,就明白了。param.cmd就是上面说的命令行文件。
怎么样,这样就不怕参数配置错误了吧。保存到文件,每次启动,就很轻松了。
4、从环境变量读入参数值
gflags另外还给我们提供了 –fromenv 和 –tryfromenv 参数,通过这两个参数,我们的程序可以从环境变量中获取到具体的值。两者有什么不一样呢。你看到他们的区别仅仅是有无“try”,聪明的你一定猜到了。
- –fromenv 从环境变量读取参数值 –fromenv=port,confPath 表明要从环境变量读取port,confPath两个参数的值。但是当无法从环境变量中获取到的时候,会报错,同时程序退出。【注意:gflags的变量名是 FLAGS_我们定义的参数名,开篇的代码里,估计细心的你已经发现了】
- –tryfromenv 与–fromenv类似,当参数的没有在环境变量定义时,不退出。
也来一个例子,一看便明了。
版本号和帮助信息
我们一般使用程序的时候,都离不开两个参数 –version 和 –help。来看看上面实现的demo能否支持呢?
哈,help支持了,但是version没支持,而且help信息里面还有waring。没关系,我们可以用 SetVersionString() 和 SetUsageMessage() 方法来满足需求。修改后的代码如下:
【注意:SetVersionString() 和 SetUsageMessage() 一定要在 ParseCommandLineFlags() 之前设定。】
可以来炫一把了:
原文链接:http://www.leoox.com/?p=270
- 用Google的gflags解析命令行参数
- 用Google的gflags优雅的解析命令行参数
- 用Google的gflags优雅的解析命令行参数
- 用Google的gflags优雅的解析命令行参数(一)
- 用Google的gflags优雅的解析命令行参数
- gflags(google开源的一套命令行参数解析工具)
- Google gflags库(解析命令行参数)
- 用Google的gflags轻松的编码解析命令行参数(二)
- Google开源命令行参数解析库gflags
- Google开源命令行参数解析库gflags
- Google gflags使用说明(处理命令行参数的库)
- 使用 Google gflags 简化命令行参数处理
- gflags命令行参数
- gflags命令行参数
- Google命令行工具gflags使用
- Google gflags 的使用
- 深度学习框架Caffe学习笔记(5)-使用gflags解析命令行参数
- gflags——一个命令行参数工具
- 三栏布局方法
- Ubuntu如何用anaconda(Python3.6)+tensorflow
- Python 破解验证码
- 从测试的艺术到测试的科学
- 将Flume作为Kafka的Consumer
- 用Google的gflags解析命令行参数
- 生活的源泉
- SPOJ
- kafka的topic多分区的情况,如何保证跨区的消息消费的顺序性
- 资料
- 移动端兼容性处理方案
- Kafka应用--金融行业分布式数据计算
- awk sed示例
- Dubbo与Kafka对比