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

gflags 安装及使用

目录

引言

安装

如何用 gflags 库写代码

如何用命令行使用 gflags 库

gflags 库的其他命令行参数


引言

         gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义
和解析。 gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志( flags ),使得程序可以根据不同的运行时配置进行调整。
        

安装

sudo apt-get install libgflags-dev

如何用 gflags 库写代码

        必须包含头文件

#include <gflags/gflags.h>
        利用 gflag 提供的 定义来定义参数。该宏的 3 个参数分别为 命令行参数名 参数默
认值 参数的帮助信息
/*
DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string
*/
//示例
DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项");

通过下面的函数解析命令行参数

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

在使用宏函数定义变量时,要加 FLAGS_ 前缀

代码示例

//如何使用 gflags 库
#include <gflags/gflags.h>
#include <iostream>//用宏函数定义变量,第一个参数相当于变量名,第二个参数相当于变量的默认值,第三个参数是变量的注释
DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项");
DEFINE_int32(log_level, 1, "日志等级:1-DEBUG, 2-WARN, 3-ERROR");
DEFINE_string(log_file, "stdout", "日志输出位置设置,默认为标准输出");int main(int argc, char* argv[])
{//该函数解析命令行或配置文件中的参数google::ParseCommandLineFlags(&argc, &argv, true);//在使用变量时,要加 FLAGS_ 前缀std::cout << FLAGS_reuse_addr << std::endl;std::cout << FLAGS_log_level << std::endl;std::cout << FLAGS_log_file << std::endl;return 0;
}

如何用命令行使用 gflags 库

[可执行程序] --[变量名]=[值] --[变量名]=[值] --[变量名]=[值] ...

示例

./test --reuse_addr=flase --log_level=3 --log_file=test.log

可以把命令行参数写到配置文件里

格式如下

--[变量名]=[值]
--[变量名]=[值]
--[变量名]=[值]
...

这样,可执行程序后面不用跟一堆命令行参数了,直接指定想要读取的配置文件即可

[可执行程序] --flagfile=[配置文件路径]

示例

./test --flagfile=/home/xiao/xiao/gflags-test/test1.cofn 

gflags 库的其他命令行参数

[可执行程序] [参数]
1. --help # 显示文件中所有标识的帮助信息
2. --helpfull # -help 一样 , 帮助信息更全面一些
3. --helpshort # 只显示当前执行文件里的标志
4. --helpxml # xml 方式打印,方便处理
5. --version # 打印版本信息,由 google::SetVersionString() 设定
http://www.xdnf.cn/news/480079.html

相关文章:

  • 精准掌控张力动态,重构卷对卷工艺设计
  • 用户现场不支持路由映射,如何快速将安防监控EasyCVR视频汇聚平台映射到公网?
  • 移除链表元素数据结构oj题(力扣题206)
  • 基于MATLAB的人脸识别,实现PCA降维,用PCA特征进行SVM训练
  • 无线攻防实战指南:Wi-Fi默认密码
  • 【未】[启发式算法]含初始解要求的有:TS, GA, SA, DPSO
  • WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)
  • Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优
  • linux下tcp/ip网络通信笔记1,
  • uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)
  • uniapp婚纱预约小程序
  • 一键清理功能,深度扫描本地存储数据
  • RK3588 ADB使用
  • 品铂科技在UWB行业地位综述(2025年更新)
  • Python线性回归:从理论到实践的完整指南
  • 大语言模型 10 - 从0开始训练GPT 0.25B参数量 补充知识之模型架构 MoE、ReLU、FFN、MixFFN
  • 学习海康VisionMaster之直方图工具
  • MySQL中innodb的ACID
  • python中函数定义下划线代表什么意思,一个下划线,两个下划线什么意思
  • entity线段材质设置
  • 学习以任务为中心的潜动作,随地采取行动
  • Elasticsearch 分词与字段类型(keyword vs. text)面试题
  • 深入浅出 MinIO:身份管理与权限配置实战 !
  • AI与产品架构设计系列(2):Agent系统的应用架构与落地实
  • GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈
  • vhca_id 简介,以及同 pf, vf 的关系
  • QT6 源(103)篇三:阅读与注释 QPlainTextEdit,给出源代码
  • 基于OpenCV的SIFT特征匹配指纹识别
  • 基于 CSS Grid 的网页,拆解页面整体布局结构
  • MCP协议的核心机制和交互过程