当前位置: 首页 > 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

相关文章:

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

最近在研究序列化,每次的proto文件手敲生成代码指令都很麻烦,干脆自己写一个泛用脚本,这样以后使用时候就方便了。 废话不多说,首先上代码: #!/bin/bash # 检查是否提供了文件名参数 if [ -z "$1" ]; then…...

LeetCode704.二分查找及二分法

每日一题:LeetCode704.二分查找 LeetCode704.二分查找知识点:二分法解题代码 LeetCode704.二分查找 问题描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中…...

2023年R1快开门式压力容器操作证模拟考试题库及R1快开门式压力容器操作理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2023年R1快开门式压力容器操作证模拟考试题库及R1快开门式压力容器操作理论考试试题是由安全生产模拟考试一点通提供,R1快开门式压力容器操作证模拟考试题库是根据R1快开门式压力容器操作最新版教材&#…...

探索NLP中的核心架构:编码器与解码器的区别

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

解决:Error: Missing binding xxxxx\node_modules\node-sass\vendor\win32-x64-83\

一、具体报错 二、报错原因 这个错误是由于缺少 node-sass 模块的绑定文件引起的。 三、导致原因 3.1、环境发生了变化 3.2、安装过程出现问题 四、解决方法步骤: 4.1、重新构建 node-sass 模块 npm rebuild node-sass 4.2、清除缓存并重新安装依赖 npm c…...

科研学习|科研软件——面板数据、截面数据、时间序列数据的区别是什么?

一、数据采集方式不同 面板数据是通过在多个时间点上对同一组体进行观测而获得的数据。面板数据可以是横向面板数据,即对同一时间点上不同个体的观测,也可以是纵向面板数据,即对同一个体在不同时间点上的观测。采集面板数据需要跟踪相同的个体…...

【UE5】物体沿样条线移动

目录 效果 步骤 一、使用样条线创建路径 二、创建沿样条线路径移动的物体 三、定义可移动物体的生成器 效果 步骤 一、使用样条线创建路径 先创建一个Actor蓝图,这里命名为“BP_Line” 该蓝图中只需添加一个样条组件 将“BP_Line”拖入场景中 按住Alt鼠标左键…...

Qt控件按钮大全

​ 按钮 在 Qt 里,最常用使用的控件就是按钮了,有了按钮,我们就可以点击,从而响应事件,达到人机交互的效果。不管是嵌入式或者 PC 端,界面交互,少不了按钮。Qt 按钮部件是一种常用的部件之一,Qt 内置了六种按钮部件如下: (1) QPushButton:下压按钮 (2) QToolBu…...

软件工程--软件过程学习笔记

本篇内容是对学校软件工程课堂内容的记录总结,部分也来源于网上查找的资料 软件过程基础 软件过程是指在软件开发过程中,经过一系列有序的步骤和活动,从问题定义到最终软件产品交付和维护的全过程。这个过程旨在确保软件项目能够按时、按预…...

高校教师资格证备考

高等教育制度 关于人的全面发展和个体发展的关系,说法正确的是(ABC)。 A.个体发展是在全面发展基础上的选择性发展 B.全面发展是个体发展的前提和基础 C.个体发展又是全面发展的动力 D.个体发展是全面发展的前提和基础...

Git通过rebase合并多个commit

在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。 1. 查看提交历…...

ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现

偶吼吼胜利在望,冲冲冲 老规矩新建功能包 工作空间目录下/src下开启终端输入 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何实现tf广播 引入库 c python …...

计算机算法分析与设计(23)---二分搜索算法(C++)

文章目录 1. 算法介绍2. 代码编写 1. 算法介绍 1. 二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search&#xf…...

前置语音群呼与语音机器人群呼哪个更好

最近通过观察自己接到的营销电话,通过语音机器人外呼的量应该有所下降。同时和客户交流获取到的信息,也是和这个情况类似,很多AI机器人群呼的量转向了OKCC前置语音群呼。询问原因,说是前置语音群呼转化更快,AI机器人群…...

『Element Plus の 百科大全』

Element Plus 官网 点击跳转...

P3879 [TJOI2010] 阅读理解- 字典树

题面 分析 将所有单词存入字典树&#xff0c;重点值怎么判断在哪一行出现过&#xff0c;对于字典树查询的判断字符串是否存在的数组可以开成二维&#xff0c;也就是在查询到某个字符串存在后&#xff0c;再通过循环判断每一层是否存在。 代码 #include <bits/stdc.h>…...

upgrade k8s (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-11-17 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 本文只是从网上搜索一些升级k8s的理论学习&#xff0c;下面的步骤未实际测…...

CronExpression

CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…...

释放机器人潜力,INDEMIND深耕底层技术

市场转暖&#xff0c;但攘外需要同时安内。 市场降温之后&#xff0c;正迎来拐点 疫情之后&#xff0c;经济逐渐下行&#xff0c;服务机器人的“好日子”也随之结束&#xff0c;整个行业都在动荡中经历渡劫。根据TE智库报告显示&#xff0c;从2022年开始&#xff0c;我国服务…...

【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript进阶指南 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...