便利工具分享:一个proto文件的便利使用工具

简介: 便利工具分享:一个proto文件的便利使用工具

最近在研究序列化,每次的proto文件手敲生成代码指令都很麻烦,干脆自己写一个泛用脚本,这样以后使用时候就方便了。

废话不多说,首先上代码:

#!/bin/bash
# 检查是否提供了文件名参数
if [ -z "$1" ]; then
  echo "用法: $0 文件名 输出目录(默认当前目录)"
  exit 1
fi
# 设置输出目录 
# 检查是否将输出目录设置 
if [ -z "$2" ]; then 
  OUTDIR_PROTO=$(dirname "$0")
else
  OUTDIR_PROTO=$2
fi
# 使用提供的文件名和语言
NAME_PROTO=$1
protoc --cpp_out=. $NAME_PROTO
protoc --cpp_out=$OUTDIR_PROTO --grpc_out=$OUTDIR_PROTO --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin $NAME_PROTO

下面是对脚本的逐行解析

这是一个使用Bash脚本编写的简单示例,用于将Protocol Buffers(protobuf)文件编译为gRPC库。以下是代码的逐行解释:

  1. 第一行:#!/bin/bash,指定脚本使用Bash解释器。
  2. 第二行:# 检查是否提供了文件名参数,检查是否提供了文件名参数。如果没有提供,输出用法说明并退出。
  3. 第四行:# 设置输出目录,设置输出目录。如果没有设置输出目录,输出默认输出目录。
  4. 第五行:# 检查是否将输出目录设置,检查是否将输出目录设置。如果没有设置,将输出目录设置为默认目录。
  5. 第六行:OUTDIR_PROTO=$(dirname "$0"),获取脚本所在的目录。
  6. 第七行:if [ -z "$2" ]; then,如果没有设置输出目录,将输出目录设置为默认目录。
  7. 第八行:OUTDIR_PROTO=$2,将设置的输出目录赋值给OUTDIR_PROTO变量。
  8. 第九行:NAME_PROTO=$1,获取提供的文件名参数。
  9. 第十行:protoc --cpp_out=. $NAME_PROTO,使用protoc命令将文件编译为C++代码。
  10. 十一行:protoc --cpp_out=OUTDIRPROTOgrpcout=OUTDIR_PROTO --grpc_out=OUTDIR_PROTO --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin $NAME_PROTO,使用protoc命令将文件编译为gRPC库。1. 第一行:#!/bin/bash,指定脚本使用Bash解释器。
  11. 第二行:# 检查是否提供了文件名参数,检查是否提供了文件名参数。如果没有提供,输出用法说明并退出。
  12. 第四行:# 设置输出目录,设置输出目录。如果没有设置输出目录,输出默认输出目录。
  13. 第五行:# 检查是否将输出目录设置,检查是否将输出目录设置。如果没有设置,将输出目录设置为默认目录。
  14. 第六行:OUTDIR_PROTO=$(dirname "$0"),获取脚本所在的目录。
  15. 第七行:if [ -z "$2" ]; then,如果没有设置输出目录,将输出目录设置为默认目录。
  16. 第八行:OUTDIR_PROTO=$2,将设置的输出目录赋值给OUTDIR_PROTO变量。
  17. 第九行:NAME_PROTO=$1,获取提供的文件名参数。
  18. 第十行:protoc --cpp_out=. $NAME_PROTO,使用protoc命令将文件编译为C++代码。
  19. 十一行:protoc --cpp_out=OUTDIRPROTOgrpcout=OUTDIR_PROTO --grpc_out=OUTDIR_PROTO --plugin=protoc-gen-grpc=/usr/local/bin/grpc_cpp_plugin $NAME_PROTO,使用protoc命令将文件编译为gRPC库。

调用方式

[zry@localhost protos]$ ./test.sh DeviceData.proto

这里是我调用了一个 名为DeviceData.proto的文件,你可以换成自己的proto文件。

[zry@localhost protos]$ ./test.sh DeviceData.proto ./GRPC_CODE

这里是我调用了一个 名为DeviceData.proto的文件,你可以换成自己的proto文件。把生成路径设置为了当前目录下的一个子文件夹,这样方便管理。

分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za

目录
相关文章
|
1月前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。
1495 2
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
1021 0
|
Ubuntu
Ubuntu 20.04 安装 Fira Code 字体
Ubuntu 20.04 安装 Fira Code 字体
1800 0
|
存储 JavaScript 安全
【HarmonyOS Next之旅】HarmonyOS开发基础知识(二)
本文主要介绍了HarmonyOS应用的配置文件说明、应用数据管理和应用安全管理三大核心内容。在配置文件说明部分,详细解析了“config.json”中app、deviceConfig和module三个关键组成部分的结构与功能,涵盖版本管理、设备配置及模块定义等细节。应用数据管理部分阐述了本地数据存储、分布式数据服务、文件共享及搜索服务等功能,确保跨设备数据一致性。应用安全管理则从开发准备、编码安全、权限使用到发布分发全流程,提供了保障应用安全的最佳实践。内容全面覆盖了HarmonyOS应用开发的核心环节,为开发者提供了详尽指导。
811 1
鸿蒙开发:单一手势实现多次点击事件
TapGesture点击手势,在实际的开发中,更多的是运用于双击或者需要多次点击的场景,如果仅仅是单次点击,建议大家直接使用onClick即可。
334 1
鸿蒙开发:单一手势实现多次点击事件
|
运维 Kubernetes 监控
|
数据采集 数据可视化 数据挖掘
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
本文介绍了一个基于Django框架开发的今日头条数据分析可视化系统,该系统具备后台管理、增删改查功能以及多用户登录,利用数据可视化技术为新闻媒体行业提供数据管理和决策支持。
586 0
基于Django的数据分析可视化系统,有后台,有增删改查,实现多用户登录
|
数据可视化 Python
Python中的等值线平滑处理技术
Python中的等值线平滑处理技术
707 2
|
C# 图形学
Unity C# 《有限状态机》的用法教程详解
Unity C# 《有限状态机》的用法教程详解 有限状态机用法教程 本文提供全流程,中文翻译。 助力快速理解 FSM 有限状态机,完成游戏状态的切换 为新手节省宝贵的时间,避免采坑! 有限状态机简称: FSM —— 简称状态机 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模.
6795 0
|
JavaScript Java 测试技术
基于SpringBoot音乐网站与分享平台详细设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot音乐网站与分享平台详细设计和实现(源码+LW+调试文档+讲解等)