前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ gflags库使用说明

C++ gflags库使用说明

作者头像
莫斯
发布2020-09-10 11:09:40
3.7K0
发布2020-09-10 11:09:40
举报
文章被收录于专栏:备份

0. gflags 是什么?

gflags 是 google 开源的用于处理命令行参数的项目。使用c++开发,具备python接口。

项目地址:https://github.com/gflags/gflags

1. gflags 安装编译

  1. 下载 gflags
代码语言:javascript
复制
git clone https://github.com/gflags/gflags
  1. 编译安装
代码语言:javascript
复制
cd gflags			# 进入项目文件夹
cmake . 			# 使用 cmake 编译生成 Makefile 文件
make -j 24 			# make 编译
sudo make install	# 安装库
  1. 编译的时候加上 gflags 动态链接库

2. gflags 使用

2.1. 简单用法

  1. 加上 gflags 头文件
代码语言:javascript
复制
#include <gflags/gflags.h>
  1. 将需要命令行参数变量进行定义 用法如下:
代码语言:javascript
复制
DEFINE_string(变量名,默认值,描述);
  1. DEFINE_string 只是其中一种类型,其他类型还有:
  1. 在main函数加入如下解析命令行参数,一般都放在 main 开始位置
代码语言:javascript
复制
gflags::ParseCommandLineFlags(&argc, &argv, true);
  1. 访问参数
代码语言:javascript
复制
std::cout << "MYSTR is: " << FLAGS_mystr << endl;
  1. 注意使用FLAGS_ + DEFINE_string 中申明的变量名即可调用
  2. 使用
代码语言:javascript
复制
➜ g++ gflags_test.cc -o gflags_test -lgflags -lpthread 		#-l 链接库进行编译
➜ ./gflags_test -mystr="this is a value of gflags' member "	# 使用
MYSTR is: this is a value of gflags' member  				# 输出
  1. 每一种类型的定义和使用都跟上面我们的例子相似,有所不同的是 bool 参数,bool 参数在命令行可以不指定值也可以指定值,假如我们定义了一个 bool 参数 debug_bool,可以在命令行这样指定:
代码语言:javascript
复制
➜  ./gflags_test -debug_bool 		# 这样就是 true
➜  ./gflags_test -debug_bool=true	# 这样也是 true
➜  ./gflags_test -debug_bool=1 		# 这样也是 true
➜  ./gflags_test -debug_bool=false 	# 0是false
  1. 所有我们定义的 gflags 变量都可以通过 FLAGS_ 前缀加参数名访问,gflags 变量也可以被自由修改

2.2. 简单使用实例

代码语言:javascript
复制
#include <iostream>
#include <gflags/gflags.h>

DEFINE_string(name, "zhang san", "your name");
DEFINE_int32(age, 18, "your age");

int main(int argc, char** argv) {
	gflags::ParseCommandLineFlags(&argc, &argv, true);
	std::cout << "your name is : " << FLAGS_name
        << ", your age is: " << FLAGS_name << std::endl;
    return 0;
}

2.3. 进阶使用

2.3.1. 跨文件调用

如果你想要访问在另一个文件定义的 gflags 变量呢?使用 DECLARE_,它的作用就相当于用 extern 声明变量。为了方便的管理变量,我们推荐在 .cc 或者 .cpp文件中DEFINE 变量,然后只在对应.h 中或者单元测试中 DECLARE 变量。

例如,在foo.cc 定义了一个 gflags 变量 DEFINE_string(name, 'bob', ''),假如你需要在其他文件中使用该变量,那么在 foo.h 中声明 DECLARE_string(name),然后在使用该变量的文件中 include "foo.h" 就可以。当然,这只是为了更好地管理文件关联,如果你不想遵循也是可以的。

2.3.2. 参数检查

使用方法如下:

  1. 定义校验函数:
代码语言:javascript
复制
	static bool ValidatePort(const char* flagname, int32 value) {
		if (value > 0 && value < 200)   
     		return true;
   		printf("Invalid value for --%s: %d\n", flagname, (int)value);
   		return false;
	}
  1. 使用全局 static 变量来注册函数,static 变量会在 main 函数开始时就调用, 在DEFINE下定义
代码语言:javascript
复制
DEFINE_int32(age, 18, "your age");
static const bool port_dummy = gflags::RegisterFlagValidator(&FLAGS_port, &ValidatePort);
  1. 在输入不合法是就会报错
2.3.3. flagfile 使用配置文件
  1. 在一个配置文件中写上,在此将其命名为 user.flags:
代码语言:javascript
复制
--name="zhangsan" --age=18
  1. 使用
代码语言:javascript
复制
➜  ./gflags_test --flagfile  user.flags 
  1. https://github.com/gflags/gflags
  2. https://blog.csdn.net/jcjc918/article/details/50876613
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. gflags 是什么?
  • 1. gflags 安装编译
  • 2. gflags 使用
    • 2.1. 简单用法
      • 2.2. 简单使用实例
        • 2.3. 进阶使用
          • 2.3.1. 跨文件调用
          • 2.3.2. 参数检查
          • 2.3.3. flagfile 使用配置文件
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档