当前位置: 首页 > 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.dtcms.com/a/292114.html

相关文章:

  • Java 大视界 -- Java 大数据在智能交通自动驾驶车辆与周边环境信息融合与决策中的应用(357)
  • 新手向:基于Python的桌面便签与待办事项管理工具
  • [ARM]MDK出现报错error: A\L3903U的解决方法
  • Gradio, Streamlit, Dash:AI应用开发的效率之选
  • C# 析构函数
  • Unity中,Panel和 Canvas的区别
  • 矩阵中QR算法分解简介和基于Eigen库使用示例
  • Qt Creator集成开发环境使用指南
  • React Three Fiber 实现昼夜循环:从光照过渡到日月联动的技术拆解
  • “闪存普惠”如何一步到位? 华为在商业市场破题
  • 华为视觉算法面试30问全景精解
  • Node.js:RESPful API、多进程
  • GoLang教程006:循环控制语句
  • HTML结构解析
  • Python 图像处理库Pillow
  • 智能制造——解读52页汽车设计制造一体化整车产品生命周期PLM解决方案【附全文阅读】
  • 中小制造企业如何对技术图纸进行管理?
  • Dockerfile 详解
  • 客户案例 | Jabil 整合 IT 与运营,大规模转型制造流程
  • 生存分析机器学习问题
  • 跨越语言壁垒!ZKmall开源商城多语言架构如何支撑电商全球化布局
  • Web3与区块链如何革新网络安全——走在前沿
  • 「Linux命令基础」用户管理
  • redis可视化工具推荐——Tiny RDM
  • 原码反码补码
  • MSTP实验+BPDU保护机制+根桥保护机制
  • CSS自适应布局实战指南
  • JS--M端事件
  • 16核32G服务器实现5000 QPS高并发的业务线程池优化配置方案
  • Kafka基础理论速通