gflags的使用

今天,Mayuyu要向大家介绍一个非常实用的工具,叫做gflagsgflagsgoogle开源的一套命令行参数解析工具,比getopt()函数功能要强大,使用起来更加方便,gflags还支持从环境变量和配置文件中读取参数。目前有C++Python版本。本文就来详细介绍C++版本gflags的使用,主要分如下两个部分

Contents

    1. gflags的安装

    2. gflags的使用介绍

1. gflags的安装

上面我们已经对gflags有个大概的认识,接下来开始在Linux环境中安装gflags。首先下载如下安装包

链接:https://github.com/schuhschuh/gflags/releases

在线帮助文档:http://gflags.googlecode.com/svn/trunk/doc/gflags.html

   Mayuyu的版本是gflags-1.0rc2.tar.gz,然后进行解压,执行如下3

(1)./configure

(2)make

(3)make install

介绍两个比较重要的文件

doc :         gflags的帮助文件,里面介绍了gflags的一些使用方法。

src :         gflags的代码源文件。

   为了程序在运行时能加载libgflags.so文件,还需要在/usr/lib目录下建立软链接,如下

现在就彻底安装好gflags了,可以安心使用。

2. gflags的使用介绍

  

  (1)定义参数

      使用gflags需要包含头文件#include <gflags/gflags.h>。而gflags支持的参数类型有

       DEFINE_bool:   boolean

DEFINE_int32:  32-bit integer

DEFINE_int64:  64-bit integer

DEFINE_uint64: unsigned 64-bit integer

DEFINE_double: double

DEFINE_string: C++ string

定义方式如下

DEFINE_type就可以了,该宏的三个参数分别代表命令行参数名,参数默认值,参数的帮助信息。

gflags不支持列表,但是可以借助string类型实现,比如

  (2)参数访问

参数被定义后,可以通过FLAGS_name来访问,比如

注意一点,通过DEFINE定义的参数,要保证访问变量的文件和定义参数的文件是同一个文件或者是头文件

包含关系,否则将会访问不到定义的参数。在其它文件使用定义的参数通过DECLARE实现。

  (3)参数检查

参数定义后,可以为参数注册一个检查函数,当从命令行指定参数或通过SetCommandLineOption()指定

参数时,检查函数就会被调用,两个参数分别为命令行参数名,以及设置的参数值。

#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>

#include <gflags/gflags.h>

using namespace std;
using namespace google;

static bool ValidatePort(const char *flagname, int32_t val)
{
	if(val > 0 && val < 32768)
		return true;
	return false;
}
DEFINE_int32(port, 6379, "what is the port ?");

int main(int argc, char **argv)
{
    ParseCommandLineFlags(&argc, &argv, true);
    bool isPort = RegisterFlagValidator(&FLAGS_port, &ValidatePort);
	return 0;
}

建议在定义参数后,立即注册检查函数。RegisterFlagValidator()在检查函数注册成功时返回true;

如果参数已经注册了检查函数,或者检查函数类型不匹配,返回false。

  (4)初始化参数

通过调用ParseCommandLineFlags(&argc, &argv, true)实现,最后一个参数如果为true,gflags

会移除Parse过的参数,如果为false则会保留。可能会对参数顺序进行调整。

  (5)在命令行指定参数

      可以通过:--参数名=参数值 来指定。例如下面代码

#include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>

#include <gflags/gflags.h>

using namespace std;
using namespace google;

static bool ValidatePort(const char *flagname, int32_t val)
{
	if(val > 0 && val < 32768)
		return true;
	return false;
}
DEFINE_int32(port, 6379, "what is the port ?");
DEFINE_string(ip, "127.0.0.1", "My ip ?");

int main(int argc, char **argv)
{
    ParseCommandLineFlags(&argc, &argv, true);
    bool isPort = RegisterFlagValidator(&FLAGS_port, &ValidatePort);
	int32_t Port = FLAGS_port;
	string Ip = FLAGS_ip;
	cout << Port << endl;
	cout << Ip << endl;
	return 0;
}

参数可以通过下面方式指定,参数之间可以没有顺序。

  (5)一些特殊的参数认识

      --help

打印定义过的所有参数的帮助信息

      --version

打印版本信息 通过google::SetVersionString()指定

      --nodefok

但命令行中出现没有定义的参数时,并不退出(error-exit)

      --fromenv

从环境变量读取参数值 --fromenv=foo,bar表明要从环境变量读取foo,bar两个参数的值。通过

export FLAGS_foo=xxx; export FLAGS_bar=yyy 程序就可读到foo,bar的值分别为xxx,yyy。

      --tryfromenv

与--fromenv类似,当参数的没有在环境变量定义时,不退出(fatal-exit)

      --flagfile

从文件读取参数值,--flagfile=my.conf表明要从my.conf文件读取参数的值。在配置文件中指定参

数值与在命令行方式类似,另外在flagfile里可进一步通过--flagfile来包含其他的文件。

时间: 2024-10-05 07:12:35

gflags的使用的相关文章

Google开源命令行参数解析库gflags

http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog.csdn.net/codectq/article/details/17078253 cmdline —— 轻量级的C++命令行解析库 http://www.tuicool.com/articles/z2q2mmm 下载url: https://github.com/tanakh/cmdline https://github.com/gssco

用Google的gflags轻松的编码解析命令行参数

支持的参数类型 gflags支持的类型有bool,int32,int64,uint64,double和string.可以说这些基本类型大体上满足了我们的需求. DEFINE_bool: boolean DEFINE_int32: 32-bit integer DEFINE_int64: 64-bit integer DEFINE_uint64: unsigned 64-bit integer DEFINE_double: double DEFINE_string: C++ string 比如上文

使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)

2011-05-27 20:19 290人阅读 评论(0) 收藏 举报 microsoftdebuggingstructureoutputimagefile 必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ---------------------------------------------------------------- The information in this articl

Google命令行工具gflags使用

google开源的gflags是一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags还支持从环境变量.配置文件读取参数(可用gflags代替配置文件).本文简单介绍gflags的使用,内容主要译自http://gflags.googlecode.com/svn/trunk/doc/gflags.html . 定义参数 使用flags需要包含头文件  #include <gflags/gflags.h>gflags主要支持的参数类型包括bool,int32, int6

gflags 学习

一.下载 https://github.com/gflags/gflags 二.可以将gflags编译成lib 三.在需要的工程的workspace下面引入编译好的gflags动态库,在库里面写好BUILD文件,然后再需要的项目里直接写依赖编译就可以了 四.gflags里面可以定义的东西 DEFINE_bool: boolean DEFINE_int32: 32-bit integer DEFINE_int64: 64-bit integer DEFINE_uint64: unsigned 64

Google开源命令行解析工具gflags

转自:https://blog.csdn.net/achelloworld/article/details/41959595# gflags是google开源的一套命令行参数解析工具,支持C++和Python语言,其使用方法: 1. 定义参数  使用gflags需要包含头文件#include <gflags/gflags.h>.将需要的命令行参数使用gflags的宏:DEFINE_xxxxx(变量名,默认值,help-string) 定义在文件当中,定义的参数是全局的,gflags支持的参数类

Python中使用gflags

安装命令pip install python-gflags 使用示例: import gflags FLAGS = gflags.FLAGS gflags.DEFINE_string('name', 'ming', 'this is a value') gflags.DEFINE_integer('qps', 0, 'test qps') gflags.DEFINE_boolean('debug', False, 'whether debug') gflags.DEFINE_float('pri

VS2013编译报错——error LNK2001: 无法解析的外部符号 __imp_PathMatchSpecA E:\CaffeProgram\3train_mnist(p)\3train_mnist\gflags.lib(gflags.obj) 3train_mnist

解决方案来自http://blog.csdn.net/yang6464158/article/details/41743641 感谢感谢~~

caffe转换变量时的gflags问题

先解决错误7,解决方式来自于http://blog.csdn.net/wishchin/article/details/51888566这篇博文,感谢博主 只需要添加上 #pragma comment(lib,"ShLwApi.Lib") 这个库就好了~~加上以后运行就不会报这个错误了