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

LinuxC++——gflags框架入门

gflags

  • gfalgs
    • 一、gflags 的下载与安装
      • 1. 源码下载
      • 2. 编译安装(Linux/macOS)
      • 3. Windows 安装
    • 二、基本使用流程
      • 示例代码(C++)
      • 编译运行
    • 三、核心函数与宏详解
      • 1. 参数定义宏
      • 2. 参数解析函数
      • 3. 参数访问与修改
    • 四、高级特性
      • 1. 参数验证
      • 2. 从文件加载参数
      • 3. 全局参数与局部参数
    • 五、注意事项

gfalgs

gflags 是 Google 开发的一个命令行参数解析库,用于处理程序的命令行参数,比标准库的 getopt 更加灵活易用。下面详细介绍其下载、使用方法及核心函数。

一、gflags 的下载与安装

1. 源码下载

可以通过 GitHub 仓库获取最新版本:

git clone https://github.com/gflags/gflags.git

也可以直接在系统安装

sudo apt-get install libgflags-dev 

2. 编译安装(Linux/macOS)

cd gflags
mkdir build && cd build
cmake ..         # 生成Makefile
make             # 编译
sudo make install # 安装到系统目录

3. Windows 安装

通过 vcpkg 包管理器安装更便捷:

vcpkg install gflags:x64-windows

二、基本使用流程

gflags 的核心用法是:定义参数 → 解析参数 → 使用参数。

示例代码(C++)

#include <gflags/gflags.h>
#include <iostream>// 定义命令行参数(类型、名称、默认值、帮助信息)
DEFINE_bool(debug, false, "Enable debug mode");       // 布尔型
DEFINE_int32(port, 8080, "Server port number");      // 32位整型
DEFINE_string(ip, "127.0.0.1", "Server IP address"); // 字符串型int main(int argc, char* argv[]) {// 解析命令行参数gflags::ParseCommandLineFlags(&argc, &argv, true);// 使用参数(通过FLAGS_前缀访问)std::cout << "Debug mode: " << (FLAGS_debug ? "on" : "off") << std::endl;std::cout << "Server address: " << FLAGS_ip << ":" << FLAGS_port << std::endl;return 0;
}

编译运行

编译时需要链接 gflags 库:

g++ -o example example.cpp -lgflags

运行时指定参数:
通过–参数名 的方式输入参数,更加直观

./example --debug --port 9090 --ip 192.168.1.1

输出:

Debug mode: on
Server address: 192.168.1.1:9090

三、核心函数与宏详解

1. 参数定义宏

gflags 提供多种类型的参数定义宏,格式为

DEFINE_<type>(name, default, help):

  • DEFINE_bool:布尔型(注意命令行传参时用 --name 表示 true,–noname 表示 false)

  • DEFINE_int32/DEFINE_int64:32/64 位整型

  • DEFINE_uint32/DEFINE_uint64:无符号整型

  • DEFINE_double:浮点型

  • DEFINE_string:字符串型

2. 参数解析函数

主函数参数解析:

gflags::ParseCommandLineFlags(&argc, &argv, remove_flags)

功能:解析命令行参数。参数:

  • remove_flags:若为 true,解析后 argc/argv 中仅保留非参数部分;若为 false,则保留所有参数。

设置参数帮助信息:

gflags::SetUsageMessage(usage)

功能:设置程序的帮助信息(当传入 --help 时显示)。

示例

gflags::SetUsageMessage("Usage: ./example [options]");

获取版本:

gflags::VersionString()

功能:返回 gflags 库的版本信息。

3. 参数访问与修改

访问参数:通过 FLAGS_<name> 直接访问(如 FLAGS_port)。

修改参数:直接赋值(如 FLAGS_port = 9090)。

检查参数是否被用户设置

gflags::GetCommandLineFlagInfoOrDie("port").is_default

(true 表示使用默认值,false 表示用户指定了值)

四、高级特性

1. 参数验证

可以通过 REGISTER_VALIDATOR 注册参数验证函数,确保参数合法:

bool ValidatePort(const char* flagname, int32_t value) {return value > 0 && value <= 65535; // 端口必须在1-65535之间
}REGISTER_VALIDATOR(port, ValidatePort); // 绑定到port参数

在这里插入图片描述

2. 从文件加载参数

通过 --flagfile=filename 从文件读取参数(文件中每行一个参数,如 --port=8080)。
在这里插入图片描述

在这里插入图片描述

3. 全局参数与局部参数

全局参数:在 .h 文件中用 DECLARE_<type>(name) 声明,在 .cpp 中用 DEFINE_<type> 定义,供多文件共享。

局部参数:仅在单个 .cpp 中定义,不对外暴露。

五、注意事项

布尔参数在命令行中无需赋值,–debug 等价于 --debug=true,–nodebug 等价于 --debug=false。

参数解析必须在程序早期调用(在使用任何参数之前)。

若参数名冲突,会在编译时报错。

http://www.dtcms.com/a/414226.html

相关文章:

  • 开源 C# 快速开发(七)通讯--串口
  • 容器化安装新趋势:云原生到边缘计算
  • 【Linux】深入理解Linux的进程(一)
  • 【JAVA】从入门到放弃-03:IDEA、AI插件、工程结构
  • 网站如何做搜索引擎优化精准防恶意点击软件
  • 西安北郊做网站代理网点什么意思
  • 云原生之CNCF 是什么
  • LeetCode算法“无重复字符的最长子串”哈希表+滑动窗口+贪心
  • 使用 TypeScript 实现基于 pgvector 的 LLM 自动化测试用例
  • LeetCode-hot100——验证二叉搜索树
  • CentOS7安装部署K8s
  • 【无标题】使用 Playwright 实现跨 Chromium、Firefox、WebKit 浏览器自动化操作
  • 做网站能用思源黑体吗国内外网站网站
  • 基于Qt的跨平台Word文档导出器WordEx的设计与实现
  • LeetCode 0812.最大三角形面积:三角形面积公式考察
  • LeetCode热题100--994. 腐烂的橘子--中等
  • 杭州做网站优化wordpress整站加密
  • 用Spark+Django打造食物营养数据可视化分析系统
  • 个人用云计算学习笔记 --17(DNS 服务器)
  • 泛微 Ecology10 OA 系统介绍
  • 哪个网站可以直接做ppt上海网站免费制作
  • STM32CubeMX安装教程
  • 游戏引擎以及游戏开发
  • 使用Python实现自动编写Word全自动化系统
  • 用flash做的经典网站微信公众号制作平台
  • OpenAI正式推出GPT-5-Codex增强型AI编程助手,该工具专为软件工程师设计
  • SpringMVC 进阶:核心组件详解与参数绑定全攻略
  • SpringMVC 实战:整合 MyBatis 实现完整 CRUD
  • Interleaving-Reasoning-Generation - 交错推理生成技术
  • 【C++】:继承全面解析