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

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.lryc.cn/news/2378706.html

相关文章:

  • Linux面试题集合(2)
  • 致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)
  • std::ratio<1,1000> 是什么意思?
  • 基于Llama3的开发应用(二):大语言模型的工业部署
  • 2025.05.17淘天机考笔试真题第三题
  • windows 10 做服务器 其他电脑无法访问,怎么回事?
  • Linux进程信号处理(26)
  • 【从设置到上传的全过程】本地多个hexo博客,怎么设置ssh才不会互相影响
  • 顶层架构 - 消息集群推送方案
  • Python训练打卡Day26
  • 构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
  • 报表控件stimulsoft教程:如何在报表和仪表板中创建热图
  • (8)python开发经验
  • 0x08.Redis 支持事务吗?如何实现?
  • win32相关(字符编码)
  • 使用Langfuse和RAGAS,搭建高可靠RAG应用
  • VSCode + Cline AI辅助编程完全指南
  • android studio导入项目
  • Autosar Nvm下电存储实现方式-基于ETAS工具
  • c# 数据结构 树篇 入门树与二叉树的一切
  • Python Bug 修复案例分析:asyncio 事件循环异常引发的程序崩溃 两种修复方法
  • 题单:递归求和
  • 融智学视域下的系统性认知增强框架——基于文理工三类AI助理赋能HI四阶跃迁路径
  • 怎么在excel单元格1-5行中在原来内容前面加上固定一个字?
  • 使用 Vue Tour 封装一个统一的页面引导组件
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库
  • 数据结构 -- 顺序查找和折半查找
  • 信息收集+初步漏洞打点
  • 2025年01月10日浙江鑫越系统科技前端面试
  • JavaScript【5】DOM模型