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

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

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

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

#!/bin/bash
# 检查是否提供了文件名参数
if [ -z "$1" ]; thenecho "用法: $0 文件名 输出目录(默认当前目录)"exit 1
fi
# 设置输出目录 
# 检查是否将输出目录设置 
if [ -z "$2" ]; then OUTDIR_PROTO=$(dirname "$0")
elseOUTDIR_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=$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=$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

相关文章:

  • Filter和ThreadLocal结合存储用户id信息
  • HashMap散列表的相关知识点
  • Python Flask: 构建轻量级、灵活的Web应用
  • 一键云端,AList 整合多网盘,轻松管理文件多元共享
  • jbase打印导出实现
  • TCP/IP详解卷一第三章“链路层”概要总结(未完编辑中)
  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • QQ五毛项目记
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • [acwing周赛复盘] 第 94 场周赛20230311
  • 解决:微软在登录时总是弹出需要家长或监护人同意才能使用该账户并且不断循环?
  • Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)
  • Spring 事务和事务传播机制
  • 2023年第九届数维杯国际大学生数学建模挑战赛
  • 一文图解爬虫_姊妹篇(spider)
  • __proto__ 和 prototype的关系
  • 【Linux系统编程】快速查找errno错误码信息
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【笔记】你不知道的JS读书笔记——Promise
  • Apache的80端口被占用以及访问时报错403
  • Brief introduction of how to 'Call, Apply and Bind'
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Web Storage相关
  • Web标准制定过程
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 马上搞懂 GeoJSON
  • 一文看透浏览器架构
  • 白色的风信子
  • 回归生活:清理微信公众号
  • ​VRRP 虚拟路由冗余协议(华为)
  • ###项目技术发展史
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计大学生兼职系统
  • (六)vue-router+UI组件库
  • (七)理解angular中的module和injector,即依赖注入
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)插入排序
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)linux下的时间函数使用
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)利用webkit抓取动态网页和链接
  • **python多态
  • ./configure,make,make install的作用
  • .Net 8.0 新的变化
  • .net 生成二级域名
  • .NET单元测试
  • .net连接MySQL的方法
  • .Net中的集合
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @GetMapping和@RequestMapping的区别
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色