下载安装

下载地址
https://github.com/schuhschuh/gflags/archive/v2.1.1.tar.gz

安装

tar -xzvf gflags-2.1.1.tar.gzcd gflags-2.1.1mkdir buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX=/your/install/pathmakemake install

值得注意的是,我这里新建了一个build文件夹,即采用“外部构建”的方式。这样编译过程中产生的中间文件(比如.o文件)就都放在build里,不会“污染”gflags源码,做到干干净净。

环境配置

vim ~/.bashrcexport LIBRARY_PATH=/your/install/path/lib:$LIBRARY_PATHexport LD_LIBRARY_PATH=/your/install/path/lib:$LD_LIBRARY_PATHsource ~/.bashrc

使用步骤

头文件

#include <gflags/gflags.h>

定义参数

DEFINE_string(confPath, "../conf/setup.ini", "program configure file.");DEFINE_int32(port, 9090, "program listen port");DEFINE_bool(daemon, true, "bool parameter");DEFINE_double(ratio, 1.05, "double parameter");

上面三个参数分别表示:参数名称、默认值、帮助信息。

参数解析

gflags::ParseCommandLineFlags(&argc, &argv, true);//true表示不保留定义的flags

参数输出

cout << "confPath = " << FLAGS_confPath << endl;cout << "port = " << FLAGS_port << endl;

gflags的变量名是 FLAGS_我们定义的参数名。

编译运行

g++ gflags_test.cpp -o gflags_test -I/your/install/path/include -lgflags

运行是需要指定参数的,可以通过命令行和文件两种方式指定。

命令行方式

  1. 可以用 -参数名=参数值 或者 - -参数名=参数值 的方式来设定参数值。

  2. 对于bool类型的参数,除了上述方式外,还可以用 –参数名 的方式设定为true(即不带值), 使用 –no参数名 的方式设定为false。

./gflags_test -confPath="./conf/conf.ini" -port=1234 -daemon=false./gflags_test -confPath="./conf/conf.ini" -port=1234 -daemon./gflags_test -confPath="./conf/conf.ini" -port=1234 -nodaemon

文件参数方式

如果配置项非常多,也就是说命令行参数很多,那你每次启动都要一个一个的输入,此时就可以使用文件参数方式。

用 –flagfile=命令行文件 的方式就可以了。

./gflags_test -flagfile="./conf/flagfile.ini"

其中flagfile.ini中的内容如下:

--port=8888

--confPath=./conf/conf.ini

--daemon=true

帮助和版本信息

gflags::SetVersionString("1.0.0");//设置版本,./gflag_test --version的时候会显示gflags::SetUsageMessage("Usage: ./gflags_test");//帮助信息设置

【注意:SetVersionString() 和 SetUsageMessage() 一定要在 ParseCommandLineFlags() 之前设定。】

参数少显示帮助信息

if(argc<3)gflags::ShowUsageWithFlagsRestrict(argv[0], "gflags_test");//注意:第二个参数是限制的model_name

完整代码

#include <gflags/gflags.h>
#include <iostream>
#include <string>using namespace std;DEFINE_string(ip, "127.0.0.1", "ip address");
DEFINE_int32(port, 8080, "port");
DEFINE_double(retry_ratio,0.5,"retry connect");
DEFINE_bool(daemon,false,"daemon flag");int main(int argc,char* argv[]) {  gflags::SetVersionString("1.0.0");string usage_str = "Usage: ";usage_str+=argv[0];gflags::SetUsageMessage(usage_str);if(argc<2){gflags::ShowUsageWithFlagsRestrict(argv[0], "gflags_test");return 0;}gflags::ParseCommandLineFlags(&argc, &argv, true);cout<<"ip:"<<FLAGS_ip<<endl;cout<<"port:"<<FLAGS_port<<endl;cout<<"retry_ratio:"<<FLAGS_retry_ratio<<endl;cout<<"daemon:"<<FLAGS_daemon<<endl;return 0;  }

gflags的使用教程相关推荐

  1. 编译分布式并行版caffe(Open MPI)教程

    caffe版本:https://github.com/yjxiong/caffe 使用环境: 1 CentOS release 6.6 (Final) 2 CUDA8.0 3 CuDNN6.0 4 O ...

  2. ros重置后地址_从零开始丨INDEMIND双目惯性模组ROS平台下实时ORB-SLAM记录教程

    本文涉及很多代码及文字,排版.文字错误请见谅. 阅读时间预计30分钟 本文涉及图像.数据均由INDEMIND双目视觉惯性模组采集 为了防止各位同学修改出错,我们把修改好的代码及文件上传至GitHub, ...

  3. VS2013+Ceres编译教程 Win7系统

    由于想要做一些优化处理的工作,所以今天花了几个小时编译了一下ceres solver,这里对我的安装过程做个记录,希望对大家有些帮助. Ceres Solver是由Google开发的非线性最小二乘问题 ...

  4. Makefile经典教程(掌握这些足够)

    http://blog.csdn.net/ruglcc/article/details/7814546 拉轰的专栏 少壮不努力 老大徒伤悲 目录视图 摘要视图 订阅 新版极客头条上线,每天一大波干货  ...

  5. wondows10使用vcpkg编译colmap的教程(带suitesparse)

    编译环境 Windows10+cmake+vs2017+cuda10.1+qt5.12.9-windows-x86+boost1.64.0+cgal4.11+ceres+colmap3.6-maste ...

  6. 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序...

    很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...

  7. Linux编写makefile详细教程

    Linux下编写 makefile 详细教程 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是goo ...

  8. Ubuntu16.04 Caffe系列 最新更新安装教程 附NVIDIA显卡安装及cuda、cudnn、caffe的安装

    博文版本:NVIDIA 418.74(对应显卡2070,如果是1060的请下载较低版本的),cuda 10.0, cudnn 7.6.2, opencv 3.4.3 总结了一些网上其他教程的坑并已修改 ...

  9. C++下使用glog教程

    目录 一.背景介绍 二.代码 三.使用 1.log输出 2.gflags使用 glog使用教程 glog使用教程2 一.背景介绍 glog是一个输出日志的库,类似std::cout的功能,但是其输出更 ...

最新文章

  1. 一步一步SharePoint 2007之十七:解决实现Form认证后无法再用SharePoint Designer编辑网站的问题...
  2. VM与VPC共存(续)
  3. measureChildren作品
  4. java学习笔记十一——对象转型
  5. python getopterror_python3 getopt用法
  6. ios 在UIView上画图,线条
  7. nginx mime.types php,使用重写和有效的mime类型配置NGINX的正确方法
  8. Java 动态代理详解
  9. Cocos Creator 的实现拖尾效果
  10. 【TDA4系列】硬件分析与刷写程序的几种方式
  11. 装箱问题 BPP first fit、best fit、first fit decreasing、best fit decreasing
  12. 怎么用计算机弹出迪迦,迪迦奥特曼不常用的八大技能,迪迦可以瞬移
  13. h5可以获取本机手机号码么_h5页面模板免费制作丨动态h5页面模板挑选
  14. 微信公共号开发简单入门
  15. 算法基础部分-二叉树
  16. 2023年安徽省职业院校“磐云杯”网络安全竞赛任务书
  17. 一套打通 Github 搜索语法
  18. 中国烟酰胺单核苷酸(NMN)行业研究与投资预测报告(2022版)
  19. ROS:AUSU Xtion Pro Live OPENNI2
  20. 从n个不同元素中取出m个元素排列组合

热门文章

  1. 天津理工大学计算机网络复习
  2. tf.gradients
  3. iPad、iphone、Windows PC间文件共享、互传
  4. JVM之Gc基础知识
  5. 云灾备方案,让企业无忧数据灾难
  6. 电动汽车模型的各模块的Simulink模型,包括驾驶员模块,整车控制器模块,电机模块,变速器模块
  7. 大数据谈论热点有_数据科学推文分析–人们在谈论什么工具?
  8. 2023,不一样的数据库
  9. 【万人千题】《第一阶段:算法零基础抱团打卡》学习路线指引
  10. 如何发布打包并发布自己的Android应用(APP)