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

gflags使用

gflags介绍

gflags库用于命令行参数的声明、定义和解析,使我们能够灵活配置程序的运行效果。例如,在服务端程序开发中,我们可以通过命令行自定义IP地址和端口号,而无需修改代码。又如,我们可以用gflags的宏定义一个“是否打印调试信息”的参数,默认值为false(不打印),如果需要打印调试信息,只需在命令行中将该参数设置为true即可。

gflags安装

dev@dev-host:~/workspace/gflags$ sudo apt-get install libgflags-dev

查看是否安装成功

$ ls /usr/include/gflags/
gflags_completions.h  gflags_declare.h  gflags_gflags.h  gflags.h
$ whereis libgflags.so
libgflags.so: /usr/lib/x86_64-linux-gnu/libgflags.so

gflags使用

1.包含头文件#include<gflags/gflags.h>
2.定义参数(启动程序时可以用命令行指定它们,不用改代码就能控制程序行为)
DEFINE_type(参数名, 默认值, 说明参数);
type支持bool、int32、int64、uint64、double
说明参数可用./your_program --help查看
3. 访问参数
在程序中使用FLAGS_前缀就能访问标志,即命令行参数,用gflags的宏定义的参数
4.不同文件访问参数
宏声明DECLARE_bool(标志),能访问另一个文件中的参数
5.解析所有参数(让所有定义的参数被正确赋值)
google::ParseCommandLineFlags(&argc, &argv, true);
6.运行参数设置
—str_format=“xxx”
—num_format=10
—bool_format or —nobool_format
7.配置文件使用
—flagfile=f,从文件f中读取命令行参数

Demo1(默认值、命令行传标志、从文件读参)

用 gflags 定义并解析命令行参数(IP、端口、调试开关),然后打印它们的值。用户可以通过命令行(如 --ip=192.168.1.1)修改默认值
main.conf

--ip="192.168.2.3"
--port=10001
--debug_enable=true

makefile

main:main.ccg++ -std=c++17 $^ -o $@ -lgflags

main.cc

#include <gflags/gflags.h>
#include <iostream>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;
}

运行代码1(打印默认值)
./main
127.0.0.1
8080
1

运行代码2(打印传入值)
./main --ip="192.168.0.1" --port=9090 --nodebug_enable
192.168.1.0
9090
0

运行代码3
./main --flagfile="./main.conf"
"192.168.2.3"
10001
1

Demo2(用另一个文件里定义的标志)

在 flags_def.cc 定义 --port 参数,在 main.cc 中声明并使用它,实现跨文件共享命令行参数
flags_def.cc

#include <gflags/gflags.h>
DEFINE_int32(port, 8080, "Port number to listen on");

main.cc

#include <gflags/gflags.h>
#include <iostream>DECLARE_int32(port); //声明int main(int argc, char *argv[])
{google::ParseCommandLineFlags(&argc, &argv, true);std::cout << FLAGS_port << std::endl;return 0;
}

编译时链接两个文件一起:
g++ main.cc flags_def.cc -lgflags -o main

运行代码1 (打印默认值)
./main
8080               

运行代码2(打印传入值)
./main --port=1234
1234               

http://www.lryc.cn/news/596729.html

相关文章:

  • 【锁】MySQL中有哪几种锁?
  • 【C语言进阶】动态内存管理(1)
  • Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)
  • NumPy库使用教学,简单详细。
  • 一些Avalonia与WPF内容的对应关系和不同用法
  • numpy的详细知识点,简单易懂
  • 【Linux系统】基础IO
  • HTTP 协议常见字段(请求头/响应头)
  • 【初识数据结构】CS61B 中的堆以及堆排序算法
  • 数据库设计mysql篇
  • 第六章 工具调用
  • linux辅助知识(Shell 脚本编程)
  • 基于LangGraph的Open Deep Research架构全解析:从多Agent协作到企业级落地
  • 元宇宙游戏与VR的关联性及发展分析(截至2025年7月)
  • 工业互联网时代,如何通过混合SD-WAN提升煤炭行业智能化网络安全
  • 【上市公司变量测量】Python+FactSet Revere全球供应链数据库,测度供应链断裂与重构变量——丁浩员等(2024)《经济研究》复现
  • Spring之【Bean工厂后置处理器】
  • 从重复劳动到自动化:火语言 RPA 的实践与思考
  • 《计算机“十万个为什么”》之 MQ
  • Java从入门到精通!第十一天(Java常见的数据结构)
  • .net 警告【代码 CS1998】此异步方法缺少 “await“ 运算符,将以同步方式运行。
  • Qt字符串处理与正则表达式应用
  • SSL VPN技术
  • SpringCloud Nacos配置中心
  • 网易视觉算法面试30问全景精解
  • Python实例之画小猪佩奇
  • Java函数指南:从Function到BiFunction的深度解析
  • AI AgentLLM架构演进的大逻辑和小脉络
  • rocky9-zabbix简单部署
  • 第十一章 用Java实现JVM之异常处理