当前位置: 首页 > 工具软件 > Google GFlags > 使用案例 >

google gflags--参数传递 学习总结

章学义
2023-12-01

 

google gflags--命令行参数传递

简介

gflags 是google开源的一套命令行参数解析工具,比 getopt 功能更加强大,使用起来更加方便。用在百度Apollo中gflag被广泛的应用在各种全局变量中,例如节点名,变量名,各种状态标志中。

 

什么是命令行参数解析工具呢?

这里用linux运行C++可执行文件做例子,例如:./test cmd1 cmd2

其中cmd1和cmd2 就是命令行参数,gflags就是用来解析cmd1 cmd2 到程序中的;在cpp中命令行参数就是字符串

 

头文件

#include < gflags/gflags.h >

宏定义

将需要的命令行参数使用gflags的宏来定义,例如:DEFINE_xxxxx(变量名,默认值,help-string) 定义在文件当中,注意:是全局的

格式: DEFINE_xxxxx(变量名,默认值,help-string)

DEFINE_string(gps_topic, "/apollo/sensor/gnss/odometry", "GPS topic name");

其中xxxxx是数据类型,如:bool、int32、int64、uint64、double、string

 

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;

 

main函数添加

在main函数中开始的地方加入,以下这句话:

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

//如果设为true,则该函数处理完成后,argv中只保留argv[0]argc会被设置为1

//如果为false,则argvargc会被保留,但是注意函数会调整argv中的顺序。

 

调用

在后续代码中使用FLAGS_变量名访问对应的命令行参数方法如下:

printf("%s", FLAGS_mystr);

 

 

gflags进阶

在其他文件中使用定义的flags变量

简介

有些时候需要在main之外的文件使用定义的flags变量,这时候可以使用宏定义DECLARE_xxx(变量名)声明一下

在对应的.h文件中进行DECLARE_xxx声明,需要使用的文件直接include就行了。

 

例子

格式:DECLARE_xxx(变量名)

DECLARE_bool(enable_adapter_dump);

DECLARE_string(monitor_topic);

 

支持以下类型:

DECLARE_bool: boolean;

DECLARE_int32: 32-bit integer;

DECLARE_int64: 64-bit integer;

DECLARE_uint64: unsigned 64-bit integer;

DECLARE_double: double;

DECLARE_string: C++ string;

 

判断flags变量是否被用户使用

  在gflags.h中,还定义了一些平常用不到的函数和结构体。这里举一个例子,判断参数port有没有被用户设定过

google::CommandLineFlagInfo info;



    if(GetCommandLineFlagInfo("port" ,&info) && info.is_default)
 {

        FLAGS_port = 27015;

    }

 

定制help信息与version信息

  • version信息:使用google::SetVersionString设定,使用google:: VersionString访问。
  • help信息:使用google::SetUsageMessage设定,使用google::ProgramUsage访问。
  • 注意:google::SetUsageMessage和google::SetVersionString这两个函数的调用必须在google::ParseCommandLineFlags中

 

希望对你有帮助。

 类似资料: