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安装

centos

sudo yum install -y gflags-devel

ubuntu

sudo apt-get install libgflags-dev

gflags 支持定义多种类型的宏函数:

DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string

访问参数

我们可以在程序中通过 FLAGS_name 像正常变量一样访问标志参数。比如在上面的例子中,我们可以通过 FLAGS_big_menu 和 FLAGS_languages 变量来访问命令行参数。

不同文件访问参数

如果想再另外一个文件访问当前文件的参数,以参数 FLAGS_big_menu 为例,我们可以使用用宏 DECLARE_bool(big_menu)来声明引入这个参数。其实这个宏就相当于做了 extern FLAGS_big_menu, 定义外部链接属性。

初始化所有参数

当我们定义好参数后,需要告诉可执行程序去处理解析命令行传入的参数,使得FLAGS_*变量能得到正确赋值。我们需要在 main 函数中,调用下面的函数来解决命令行传入的所有参数。

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

argc 和 argv 就是 main 的入口参数

第三个参数被称为 remove_flags。如果它为 true, 表示ParseCommandLineFlags 会从 argv 中移除标识和它们的参数,相应减少 argc 的值。如果它为 false,ParseCommandLineFlags 会保留 argc 不变,但将会重新调整它们的顺序,使得标识再前面

运行参数设置

gflags 为我们提供了多种命令行设置参数的方式。

string 和 int 设置参数

exec --log_file="./main.log"
exec -log_file="./main.log"
exec --log_file "./main.log"
exec -log_file "./main.log"

bool 设置参数

exec --reuse_addr
exec --noreuse_addr
exec --reuse_addr=true
exec --reuse_addr=false

–将会终止标识的处理。比如在 exec -f1 1 – -f2 2 中, f1 被认为是一个标识,但 f2 不会

使用案例

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

DEFINE_string(ip, "127.0.0.1", "这是服务器监听的IP地址,格式:127.0.0.1");
DEFINE_int32(port, 8080, "这是服务器监听的端口号,范围:1024~65535");
DEFINE_bool(reuse_addr, true, "是否启动端口重用");

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;
    std::cout << "reuse_addr: " << FLAGS_reuse_addr << std::endl;

    return 0;
}

运行方式:

./main --ip="101.33.252.57" --port=8081 --reuse_addr=false

配置文件的使用

配置文件的使用,其实就是为了让程序的运行参数配置更加标准化,不需要每次运行的时候都手动收入每个参数的数值,而是通过配置文件,一次编写,永久使用。需要注意的是,配置文件中选项名称必须与代码中定义的选项名称一致。

main.conf

-ip="101.33.252.57"
-port=8081
-reuse_addr=false

运行方式:

./main -flagfile="main.conf"

特殊参数标识

--help # 显示文件中所有标识的帮助信息
--helpfull # 和-help 一样, 帮助信息更全面一些
--helpshort # 只显示当前执行文件里的标志
--helpxml # 以 xml 方式打印,方便处理
--version # 打印版本信息,由 google::SetVersionString()设定
--flagfile -flagfile=f #从文件 f 中读取命令行参数

–help的使用

./main --help

image-20241119195613921

运行代码方式:

./main
./main --ip=0.0.0.0 --port=8081 --reuse_addr=false
./main -flagfile=./main.conf

[外链图片转存中…(img-EeItBtWz-1748142304832)]

运行代码方式:

./main
./main --ip=0.0.0.0 --port=8081 --reuse_addr=false
./main -flagfile=./main.conf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椿融雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值