gflags的使用教程
下载安装
下载地址
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
运行是需要指定参数的,可以通过命令行和文件两种方式指定。
命令行方式
可以用 -参数名=参数值 或者 - -参数名=参数值 的方式来设定参数值。
对于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的使用教程相关推荐
- 编译分布式并行版caffe(Open MPI)教程
caffe版本:https://github.com/yjxiong/caffe 使用环境: 1 CentOS release 6.6 (Final) 2 CUDA8.0 3 CuDNN6.0 4 O ...
- ros重置后地址_从零开始丨INDEMIND双目惯性模组ROS平台下实时ORB-SLAM记录教程
本文涉及很多代码及文字,排版.文字错误请见谅. 阅读时间预计30分钟 本文涉及图像.数据均由INDEMIND双目视觉惯性模组采集 为了防止各位同学修改出错,我们把修改好的代码及文件上传至GitHub, ...
- VS2013+Ceres编译教程 Win7系统
由于想要做一些优化处理的工作,所以今天花了几个小时编译了一下ceres solver,这里对我的安装过程做个记录,希望对大家有些帮助. Ceres Solver是由Google开发的非线性最小二乘问题 ...
- Makefile经典教程(掌握这些足够)
http://blog.csdn.net/ruglcc/article/details/7814546 拉轰的专栏 少壮不努力 老大徒伤悲 目录视图 摘要视图 订阅 新版极客头条上线,每天一大波干货 ...
- wondows10使用vcpkg编译colmap的教程(带suitesparse)
编译环境 Windows10+cmake+vs2017+cuda10.1+qt5.12.9-windows-x86+boost1.64.0+cgal4.11+ceres+colmap3.6-maste ...
- 很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序...
很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用m ...
- Linux编写makefile详细教程
Linux下编写 makefile 详细教程 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是goo ...
- Ubuntu16.04 Caffe系列 最新更新安装教程 附NVIDIA显卡安装及cuda、cudnn、caffe的安装
博文版本:NVIDIA 418.74(对应显卡2070,如果是1060的请下载较低版本的),cuda 10.0, cudnn 7.6.2, opencv 3.4.3 总结了一些网上其他教程的坑并已修改 ...
- C++下使用glog教程
目录 一.背景介绍 二.代码 三.使用 1.log输出 2.gflags使用 glog使用教程 glog使用教程2 一.背景介绍 glog是一个输出日志的库,类似std::cout的功能,但是其输出更 ...
最新文章
- 一步一步SharePoint 2007之十七:解决实现Form认证后无法再用SharePoint Designer编辑网站的问题...
- VM与VPC共存(续)
- measureChildren作品
- java学习笔记十一——对象转型
- python getopterror_python3 getopt用法
- ios 在UIView上画图,线条
- nginx mime.types php,使用重写和有效的mime类型配置NGINX的正确方法
- Java 动态代理详解
- Cocos Creator 的实现拖尾效果
- 【TDA4系列】硬件分析与刷写程序的几种方式
- 装箱问题 BPP first fit、best fit、first fit decreasing、best fit decreasing
- 怎么用计算机弹出迪迦,迪迦奥特曼不常用的八大技能,迪迦可以瞬移
- h5可以获取本机手机号码么_h5页面模板免费制作丨动态h5页面模板挑选
- 微信公共号开发简单入门
- 算法基础部分-二叉树
- 2023年安徽省职业院校“磐云杯”网络安全竞赛任务书
- 一套打通 Github 搜索语法
- 中国烟酰胺单核苷酸(NMN)行业研究与投资预测报告(2022版)
- ROS:AUSU Xtion Pro Live OPENNI2
- 从n个不同元素中取出m个元素排列组合