gflags 安装及使用

目录

引言

安装

[如何用 gflags 库写代码](#如何用 gflags 库写代码)

[如何用命令行使用 gflags 库](#如何用命令行使用 gflags 库)

[gflags 库的其他命令行参数](#gflags 库的其他命令行参数)


引言

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

安装

bash 复制代码
sudo apt-get install libgflags-dev

如何用 gflags 库写代码

必须包含头文件

cpp 复制代码
#include <gflags/gflags.h>

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

cpp 复制代码
/*
DEFINE_bool
DEFINE_int32
DEFINE_int64
DEFINE_uint64
DEFINE_double
DEFINE_string
*/
//示例
DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项");

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

cpp 复制代码
google::ParseCommandLineFlags(&argc, &argv, true);

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

代码示例

cpp 复制代码
//如何使用 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 库

bash 复制代码
[可执行程序] --[变量名]=[值] --[变量名]=[值] --[变量名]=[值] ...

示例

bash 复制代码
./test --reuse_addr=flase --log_level=3 --log_file=test.log

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

格式如下

bash 复制代码
--[变量名]=[值]
--[变量名]=[值]
--[变量名]=[值]
...

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

bash 复制代码
[可执行程序] --flagfile=[配置文件路径]

示例

bash 复制代码
./test --flagfile=/home/xiao/xiao/gflags-test/test1.cofn 

gflags 库的其他命令行参数

bash 复制代码
[可执行程序] [参数]
  1. --help # 显示文件中所有标识的帮助信息
  2. --helpfull # 和 -help 一样 , 帮助信息更全面一些
  3. --helpshort # 只显示当前执行文件里的标志
  4. --helpxml # 以 xml 方式打印,方便处理
  5. --version # 打印版本信息,由 google::SetVersionString() 设定
相关推荐
j7~14 分钟前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
weixin_3077791315 分钟前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
张小姐的猫22 分钟前
【AI大模型接入SDK】 —— 数据管理 & 与Session模块进行联动
数据结构·数据库·c++·人工智能·python·chatgpt
東隅已逝,桑榆非晚1 小时前
vector(模拟实现)
c++·笔记·学习
蒸蒸yyyyzwd2 小时前
cpp 选手备战秋招学习笔记 day36
c++
用户69586106727112 小时前
从源码到加载器:__attribute__((constructor)) / __attribute__((destructor))的跨平台实现原理详解
c++
余额瞒着我当琳3 小时前
C++多态深入解析:多态概念,多态实现条件,虚函数表与内存分布,常见问题及注意事项
c++·算法
ocean21033 小时前
2025-2026年C++专题大厂面试高频问题
开发语言·c++·面试
程序猿编码4 小时前
扔掉 Python!纯 C++ 本地跑扩散 TTS,GGML 加持,支持 RK3588 NPU 加速
c++·计算机视觉·大模型·transformer·rk3588·推理·ggml
郝学胜-神的一滴4 小时前
C++20模板元编程 02:吃透模板基础核心四大核心知识点
开发语言·数据结构·c++·程序人生·软件工程·visual studio