Ubuntu22.04 - gflags的安装和使用

目录

  • [gflags 介绍](#gflags 介绍)
  • [gflags 安装](#gflags 安装)
  • [gflags 使用](#gflags 使用)

gflags 介绍

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

它具有如下几个特点:

  • 易于使用: gflags 提供了一套简单直观的 API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。
  • 自动帮助和文档: gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。
  • 类型安全: gflags 支持多种数据类型的标志,包括布尔值、整数、字符串等,并且提供了类型检查和转换。
  • 多平台支持: gflags 可以在多种操作系统上使用,包括Windows、Linux和macOS
  • 可扩展性: gflags 允许开发者自定义标志的注册和解析逻辑,提供了强大的扩展性

gflags 安装

直接命令安装:apt-get install libgflags-dev

检测是否安装成功

gflags 使用

1.包含头文件:

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

2.定义参数:

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

复制代码
DEFINE_bool(reuse_addr, true, "是否开始网络地址重用选项");
DEFINE_int32(log_level, 1, "日志等级:1-DEBUG, 2-WARN, 3-ERROR");
DEFINE_string(log_file, "stdout", "日志输出位置设置,默认为标准输出");

3.访问参数

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

4.初始化所有参数

当我们定义好参数后,需要告诉可执行程序去处理解析命令行传入的参数,使得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地址, 格式: 127.0.0.1");
DEFINE_int32(port, 8080, "这是服务器的监听端口, 格式: 8080");
DEFINE_bool(debug_enable, true, "是否启用调试模式, 格式: true/false");

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_enable << std::endl;
    return 0;
}

运行结果:

不用默认参数进行设置

一种场景: 命令行如果需要参数, 则要手敲参数, 如果参数很多, 就很麻烦了, 所以它还支持配置文件
5.配置文件的使用

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

样例:

复制代码
-reuse_addr=true
-log_level=3
-log_file=./log/main.log

运行结果:

相关推荐
AA陈超18 小时前
LyraStarterGame 5.6 项目学习路径
c++·笔记·学习·lyra
其美杰布-富贵-李19 小时前
Fluent 网格质量全面评估(完整学习笔记)
笔记·学习·cfd·fluent·网格质量
YJlio19 小时前
桌面工具学习笔记(11.3):ZoomIt——演示、录屏与线上会议的放大标注神器
笔记·学习·安全
代码游侠19 小时前
复习——Linux 系统编程
linux·运维·c语言·学习·算法
承渊政道19 小时前
C++学习之旅【实战全面解析C++类和对象】
c++·笔记·学习
丝斯201119 小时前
AI学习笔记整理(30)—— 计算机视觉之动作识别相关算法
人工智能·笔记·学习
AA陈超19 小时前
LyraStarterGame_5.6 Experience系统分析
开发语言·c++·笔记·学习·ue5·lyra
烤麻辣烫19 小时前
黑马大事件学习-16 (前端主页面)
前端·css·vue.js·学习
嗷嗷哦润橘_20 小时前
AI Agent学习:MetaGPT项目之debate.py
学习
做cv的小昊20 小时前
计算机图形学:【Games101】学习笔记04——着色(光照与基本着色模型,着色频率、图形管线、纹理映射)
笔记·学习·3d·图形渲染·光照贴图·计算机图形学