gflags命令行参数组件
Gflags
概述
gflags是Google开发的一个开源库,用于C++应用程序中命令行参数的声明、定义和解析。gflags库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。
它具有如下几个特点:
- 易于使用:gflags 提供了一套简单直观的API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。
- 自动帮助和文档:gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。
- 类型安全:gflags 支持多种数据类型的标志,包括布尔值、整数、字符串等,并且提供了类型检查和转换。
- 多平台支持:gflags 可以在多种操作系统上使用,包括Windows、Linux 和macOS。
- 可扩展性:gflags 允许开发者自定义标志的注册和解析逻辑,提供了强大的扩展性。
官方文档: https://gflags.github.io/gflags/
代码仓库:https://github.com/gflags/gflags.git
使用
头文件
包含头文件。使用gflags库来定义/解析命令行参数必须包含如下头文件
1 |
CMake编译
1 | cmake_minimum_required(VERSION 3.20) |
语法
定义参数
利用gflag 提供的宏定义来定义参数。该宏的3 个参数分别为命令行参数名,参数默认值,参数的帮助信息。
1 | DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项"); |
程序中通过FLAGS_name
像正常变量一样访问标志参数。比如在上面的例子中,我们可以通过FLAGS_big_menu
和FLAGS_languages
变量来访问命令行参数。
如果想再另外一个文件访问当前文件的参数,以参数FLAGS_big_menu
为例,我们可以使用用
1 | DECLARE_bool(big_menu) |
来声明引入这个参数。其实这个宏就相当于做了extern FLAGS_big_menu
,定义外部链接属性。
初始化所有参数
当我们定义好参数后,需要告诉可执行程序去处理解析命令行传入的参数,使得FLAGS_*变量能得到正确赋值。我们需要在main函数中,调用下面的函数来解决命令行传入的所有参数。
1 | google::ParseCommandLineFlags(&argc, &argv, true); |
参数:
argc
和argv
就是`main 的入口参数- 第三个参数被称为
remove_flags
。- 如果它为
true
, 表示ParseCommandLineFlags
会从argv
中移除标识和它们的参数,相应减少argc的值。 - 如果它为
false
,ParseCommandLineFlags
会保留argc
不变,但将会重新调整它们的顺序,使得标识再前面。
- 如果它为
运行参数设置
gflags为我们提供了多种命令行设置参数的方式。
string和int设置参数:
1 | exec --log_file="./main.log" |
bool设置参数
1 | exec --reuse_addr |
配置文件的使用
配置文件的使用,其实就是为了让程序的运行参数配置更加标准化,不需要每次运行的时候都手动收入每个参数的数值,而是通过配置文件,一次编写,永久使用。
需要注意的是,配置文件中选项名称必须与代码中定义的选项名称一致。
1 | -reuse_addr=true |
特殊参数标识
gflags也默认为我们提供了几个特殊的标识。
1 | --help # 显示文件中所有标识的帮助信息 |
1 | user@DESKTOP-KFNQORU:~$ ./main.exe --help |
1 |
例子
1 |
|
输出:
1 | user@DESKTOP-KFNQORU:~$ ./main.exe --ip="192.169.1.1" --port=9090 --debug_enable=false |
配置文件:
1 | -ip = "192.168.1.1" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MyAKDreamのBlog!