gflags-命令行参数处理

gflags

gflags是Google开源的一套命令行参数处理的开源库,可以方便高效的处理命令参数。

参数解析

int main(int argc, char** argv){...}

main()函数参数信息保存在argc, argv中,需要遍历解析,为了处理方便,参数的顺序还会有明确的要求。使用gfalgs可以省略解析部分代码,通过调用ParseCommandLineFlags()即完成了参数的解析。

//该函数是解析命令行参数的,所以调用应该在main()入口处。
google::ParseCommandLineFlags(&argc, &argv, true);

gflags是如何解析参数的?

  1. 程序中需要定义参数名,让程序知道需要识别哪些参数。 如定义一个name参数:
DEFINE_string(name, "Catherine", "this parameter is a name.");
  1. 执行命令时,需要指定参数格式: --name="William"
  2. 调用ParseCommandLineFlags()完成解析,name参数值将保存在全局变量FLAGS_name中。

参数的定义

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_xxx方法有三个参数:

  1. 参数名
  2. 默认值(命令执行时未指定参数时,参数值为默认值)
  3. 参数描述
DEFINE_string(name, "Catherine", "this parameter is a name.");

参数的使用

解析后,即可使用全局变量:FLAGS_+参数名,如FLAGS_name

如果需要在其他文件(非参数定义的文件)中使用,需要在文件中使用DECLARE_xxx()声明该参数。

//声明方法DECLARE_xxx,xxx类型和参数名要和定义一致,参数只有1个:参数名
DECLARE_string(name)

参数解析的第三参数

google::ParseCommandLineFlags(&argc, &argv, true);

第三个参数为remove_flags,标识解析后,是否要从参数列表中移除。
true:参数信息中将删除gflags相关参数,只保留不是gflags定义的参数。
false:不删除gflags参数,顺序会改变。

一般参数解析后,也没有保留的必要,设置为true就好了。

辅助函数

对于常用的版本和帮助提供了接口设置:
设置版本信息:google::SetVersionString(string);
设置帮助信息:google::SetUsageMessage(string);

执行时制定参数即可
–version:显示版本信息。
–help:显示所有帮助信息,包括自定义的帮助信息和gflags本身的帮助信息。
–helpshort:显示自定义的帮助信息。

例子

#include <gflags/gflags.h>
#include <iostream>
#include <string>

DEFINE_string(para1, "para1", "the first parameter.");
DEFINE_bool(para2, true, "the secode parameter.");

static std::string VersionInfo = "Verion 1.0";
static std::string HelpInfo = "This is help info.";


int main(int argc, char** argv) {
	google::SetVersionString(VersionInfo);
	google::SetUsageMessage(HelpInfo);
	google::ParseCommandLineFlags(&argc, &argv, true);	

    std::cout << "para1 = " << FLAGS_para1 << std::endl;
	std::cout << "para2 = " << FLAGS_para2 << std::endl;

	return 0;
}

输出

默认参数

$ ./a.out
para1 = para1
para2 = 1

指定参数

$ ./a.out --para1="mytest" --para2=false
para1 = mytest
para2 = 0

–helpshort

$ ./a.out --helpshort
.out: This is help info.

–version

$ ./a.out --version
a.out version Verion 1.0
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值