当前位置: 首页 > backend >正文

【gflags】安装与使用

gflags

  • 1. 介绍
  • 2. 安装
  • 3. 使用
    • 3.1 头文件
    • 3.2 定义参数
    • 3.3 访问参数
    • 3.4 不同文件访问参数
    • 3.5 初始化所有参数
    • 3.6 运行参数设置
    • 3.7 配置文件的使用
    • 3.8 特殊参数标识

1. 介绍

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

2. 安装

sudo apt install libgflags-dev

3. 使用

3.1 头文件

使用 gflags 库来定义/解析命令行参数必须包含如下头文件

#include<gflags/gflags.h>

3.2 定义参数

利用 gflag 提供的宏定义来定义参数。该宏的 3 个参数分别为命令行参数名,参数默认值,参数的帮助信息。

DEFINE_string(ip,"127.0.0.1","这是服务器的ip地址");
DEFINE_int32(port,8080,"这是服务器的端口");
DEFINE_bool(debug_flag,true,"是否启动调试");

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

DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string

3.3 访问参数

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

3.4 不同文件访问参数

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

3.5 初始化所有参数

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

google::ParseCommandLineFlags(&argc, &argv, true);
  • argc 和 argv 就是 main 的入口参数
  • 第三个参数被称为 remove_flags。如果它为 true, 表示ParseCommandLineFlags 会从 argv 中移除标识和它们的参数,相应减少 argc 值。如果它为 false,ParseCommandLineFlags 会保留 argc 不变,但将会重新调整它们的顺序,使得标识在前面。
#include<iostream>
#include<gflags/gflags.h>DEFINE_string(ip,"127.0.0.1","这是服务器的ip地址");
DEFINE_int32(port,8080,"这是服务器的端口");
DEFINE_bool(debug_flag,true,"是否启动调试");int main(int argc,char* argv[])
{google::ParseCommandLineFlags(&argc, &argv, true);std::cout<<FLAGS_ip<<std::endl;std::cout<<FLAGS_port<<std::endl;std::cout<<FLAGS_debug_flag<<std::endl;return 0;
}
main:main.ccg++ -o $@ $^ -std=c++17 -lgflags

在这里插入图片描述

3.6 运行参数设置

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

./main --ip="192.168.1.1" --port=9090 --debug_flag=false

在这里插入图片描述

3.7 配置文件的使用

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

在这里插入图片描述

-ip=192.168.2.2
-port=7878
-debug_flag=true

在这里插入图片描述

3.8 特殊参数标识

gflags 也默认为我们提供了几个特殊的标识。

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

比如不知道有什么参数,可以使用–help进行查看

在这里插入图片描述

http://www.xdnf.cn/news/19211.html

相关文章:

  • 2025 批量下载雪球和东方财富帖子和文章导出excel和pdf
  • 一体化步进伺服电机在视觉检测设备中的应用案例
  • 弱内存模型和强内存模型架构(Weak/Strong Memory Model)
  • vue3多个el-checkbox勾选框设置必选一个
  • 一款支持动态定义路径的JAVA内存马维权工具Agenst
  • 科普文章:广告技术平台的盈利模式全景
  • 2025 批量下载hasmart所有知乎回答,文章和想法,导出txt,html和pdf
  • 指纹云手机网络环境隔离技术:筑牢海外社媒多账号运营安全屏障
  • 计算机--网络编程
  • Flutter 跨平台开发环境搭建指南
  • CVPR深度学习论文创新合集拆解:模型训练速度算提升
  • 数据库原理及应用_数据库基础_第3章数据库编程_常用系统函数
  • QWidget和QML模式下阻止槽调用的方法总结
  • 复现论文块体不锈钢上的光栅耦合表面等离子体共振
  • 【杂谈】-混沌理论能否赋予机器差异化思考能力?
  • vscode+cmake+mingw64+opencv环境配置
  • 《HM-RAG: Hierarchical Multi-Agent Multimodal Retrieval Augmented Generation》
  • 回归问题的损失函数
  • C++中的临时对象与移动语义——深入理解与实践
  • 算法复习笔记: 双指针_二分查找篇
  • GitCode全方位解析:开源新星的崛起与极致实战指南
  • 果蔬采摘机器人:自动驾驶融合视觉识别,精准定位,高效作业
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加
  • openEuler2403安装部署PostgreSQL17
  • 接口自动化测试框架
  • jumpserver
  • 虚幻基础:角色动画
  • 【Linux】系统部分——软硬链接动静态库的使用