Ubuntu22.04 - gflags的安装和使用

server/2025/2/23 11:13:01/

目录

  • 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

在这里插入图片描述

运行结果:
在这里插入图片描述


http://www.ppmy.cn/server/170112.html

相关文章

告别卡关!XSS挑战之旅全关卡通关思路详解

XSS挑战之旅 XSS测试思路Level1Level2Level3Level4Level5Level6Level7Level8Level9Level10Level11Level12Level13Level14Level15Level16Level17Level18Level19Level20免责声明&#xff1a; XSS测试思路 确定输入输出点&#xff1a; 寻找URL参数、表单输入、HTTP头&#xff08;R…

C从入门到放弃篇1

各位新入坑C语言的朋友&#xff0c;你们有福了因为你们遇到了我&#xff0c;我会带你放弃C语言&#xff0c;哈哈哈哈哈。 其实&#xff0c;学任何东西都是循序渐进的&#xff0c;在学习的初期投入更多的精力&#xff0c;将来你会越学越快。我相信&#xff0c;放弃是最容易的事…

把 vscode 伪装成 goland

goland 开发项目太卡了&#xff0c;想换到更轻量级的 vscode&#xff0c;但是用久了 goland&#xff0c; vscode 的界面风格和快捷键又看不习惯和用不习惯&#xff0c;所以把 vscode 改成了跟 goland 一样的使用方式。 下载 2个插件 安装插件「JetBrains IDE Keymap」可以让 vs…

区块链相关方法-SWOT分析

1.SWOT 一、定义:一种基于内外部竞争环境和竞争条件下的态势分析&#xff0c;通过对企业的内外环境所形成的优势&#xff08;Strengths&#xff09;、劣势&#xff08;Weaknesses&#xff09;、机会&#xff08;Opportunities&#xff09;和威胁&#xff08;Threats&#xff0…

stm32108键C-B全调性_动态可视化乐谱钢琴

108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示&#xff0c;与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …

Unity中点乘和叉乘对于我们来说的作用是什么?

在 Unity 中&#xff0c;点乘&#xff08;Dot Product&#xff09;和叉乘&#xff08;Cross Product&#xff09;是向量运算里非常重要的操作&#xff0c;在游戏开发、动画制作、物理模拟等多个方面都有着广泛的应用。 目录 1 点乘 2 叉乘 1 点乘 通过点乘公式 &#xff0c…

DeepSeek行业应用实践报告-智灵动力【112页PPT全】

DeepSeek&#xff08;深度搜索&#xff09;近期引发广泛关注并成为众多企业/开发者争相接入的现象&#xff0c;主要源于其在技术突破、市场需求适配性及生态建设等方面的综合优势。以下是关键原因分析&#xff1a; 一、技术核心优势 开源与低成本 DeepSeek基于开源架构&#xf…

分布式与集群,二者区别是什么?

??分布式 分布式系统是由多个独立的计算机节点组成的系统&#xff0c;这些节点通过网络协作完成任务。每个节点都有自己的独立计算能力和存储能力&#xff0c;可以独立运行。分布式系统的目标是提高系统的可靠性、可扩展性和性能。 分布式服务包含的技术和理论 负载均衡&am…