google gflags 使用方法

首先声明,本文描述的是google用于linux命令行下的gflags库,而非windows下debug内存的gflags。
 
gflags官方地址: https://code.google.com/p/gflags/
gflags作用:简化命令行参数的解析,作用同get_opt()类的操作。
安装方法
./configure
make
make install
 
使用方法:
  • 定义flags
  • 注册参数检查函数(可选)
  • 调用解析函数(ParseCommandLineFlags)
定义flags
使用 DEFINE_xxx 函数定义各个参数。
定义函数参数:参数名, 默认值, --help时的说明文字。
例如下面的 DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
使用方法为 ./foo --big_menu=false
默认值为true
说明文字: "Include 'advanced' options in the menu listing"
 
数据类型有:
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
 
例:
   #include <gflags/gflags.h>

   DEFINE_bool(big_menu, true,"Include 'advanced' options in the menu listing");
   DEFINE_string(languages, "english,french,german",
                 "comma-separated list of languages to offer in the 'lang' menu");
注册参数检查函数(可选)
bool port_dummy = google::RegisterFlagValidator(&FLAGS_port, &ValidatePort);
第一个参数为之前定义的需接续的参数
第二个参数为检查函数
具体的各个函数定义可见gflags.h
例子见下文。
 
当初始化检查失败时,程序退出。
重设参数值失败时,不改变原值。
调用解析函数(ParseCommandLineFlags)
参数定义和注册函数均完成后,调用下面的函数开始解析命令行。
google::ParseCommandLineFlags(&argc, &argv, true);
其他
使用 "./foo -flagfile foo.conf" 可将参数行写进文件中。(文件中的参数不可以使用空格做分割,需要使用等号做分割)
google : :SetUsageMessage(usage) 可以用来设定usage说明。
如果再其他文件中需要使用,则建议用DECLARE_xxx声明在头文件中,各处include该文件。
一个完整的例子
foo.h
#include <iostream>
#include <gflags/gflags.h>

DECLARE_int32(port);


bool ValidatePort(constchar* flagname, int32_t value);

foo.cpp
#include "foo.h"

DEFINE_int32(port, 0, "What port to listen on");

bool ValidatePort(constchar* flagname, int32_t value) {
    if (value > 0 && value<32768)   // value is ok
        return true;
    printf("Invalid value for --%s: %d\n", flagname, (int)value);
    return false;
}

foo_main.cpp
#include <iostream>
#include "foo.h"

int main(int argc,char*argv[])
{
    std::string usage("This program does nothing.  Sample usage:\n");
    usage += std::string(argv[0])+" --port 1234 \n or :\n -flagfile=foo.conf";

    google::SetUsageMessage(usage);
    bool port_dummy = google::RegisterFlagValidator(&FLAGS_port,&ValidatePort);
    google::ParseCommandLineFlags(&argc,&argv,true);

    std::cout<<"port :"<< FLAGS_port<< std::endl;

    return EXIT_SUCCESS;
}
 
有错误请指正,转发劳驾帖个地址。
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值