ubuntu下Gflags安装、配置、使用

一、基础知识

1、Gflags是一种命令行解析工具(处理命令行参数的库),主要用于解析用命令行执行可执行文件时传入的参数。在gflags中flag可以分散的定义在各个文件之中,而不用定义在一起,这就意味着在我们可以在一个单独的文件中只定义这个文件所需要用到的一些flag,链接了该文件应用都可以使用该文件中的flag,这样就能非常方便的实现代码的复用,如果不同的文件定义了相同的flag,则会产生错误,所以需要明确规范gflags的使用规范。

2、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宏实现,如下所示,分别定义了一个bool和一个string类型的参数,该宏的三个参数含义分别为命令行参数名,参数默认值,以及参数的帮助信息。


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");

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

argc 命令行传递的参数个数,argv为命令行传递的参数表,第三个参数功能如下

  • ture:函数处理完成后,argv中只保留argv[0],argc会被设置为1
  • false:argv和argc会被保留,但是注意函数会调整argv中的顺序。

 

二、Gflags安装

1、下载glags源码

git clone https://github.com/gflags/gflags.git

 

 

 

2、进入clone后的gflags目录,在此目录中创建build目录

mkdir build

3、在build目录下执行cmake ..

 

4、执行make 编译

5、执行安装命令

make install

 

 

 

三、Gflags使用

1、编写testglfags.cpp

内容如下:

#include <iostream>
#include <gflags/gflags.h>
using namespace std;

DEFINE_bool(isvip, false, "If Is VIP");
DEFINE_string(ip, "127.0.0.1", "connect ip");
DECLARE_int32(port);
DEFINE_int32(port, 80, "listen port");

int main(int argc, char** argv)
{
  gflags::ParseCommandLineFlags(&argc, &argv, true);
  std::cout<<"ip:"<<FLAGS_ip<<std::endl;
  std::cout<<"port:"<<FLAGS_port<<std::endl;
  if (FLAGS_isvip)
  {
      std::cout<<"isvip:"<<FLAGS_isvip<<std::endl;
  }
  gflags::ShutDownCommandLineFlags();
  return 0;
}

2、执行编译命令

sudo g++  -Wall -o testgflags testgflags.cpp -lgflags -lpthread
出现以下错误:

执行如下语句,解决此错误问题:

sudo apt-get purge libgflags-dev
 

重新编译,编译成功。

3、执行该程序

 测试成功!

4、进一步扩展

如果命令参数过多,还需要每次运行的时候输入命令参数,这样太麻烦,可以把命令参数提前写入flag文件,然后使用。

编译flagfile.flags文件

文件内容如下:

-ip="192.168.31.14" -port=8000 -isvip=ture

不用编译cpp文件,直接运行

参考链接:

【1】https://blog.csdn.net/Lo_Bamboo/article/details/105383264?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

【2】https://blog.csdn.net/jcjc918/article/details/50876613?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

【3】https://blog.csdn.net/lanmolei814/article/details/78478124?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

【4】https://www.cnblogs.com/xueqiuqiu/articles/10176161.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值