最近在研究序列化,每次的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库。以下是代码的逐行解释:
- 第一行:
#!/bin/bash
,指定脚本使用Bash解释器。 - 第二行:
# 检查是否提供了文件名参数
,检查是否提供了文件名参数。如果没有提供,输出用法说明并退出。 - 第四行:
# 设置输出目录
,设置输出目录。如果没有设置输出目录,输出默认输出目录。 - 第五行:
# 检查是否将输出目录设置
,检查是否将输出目录设置。如果没有设置,将输出目录设置为默认目录。 - 第六行:
OUTDIR_PROTO=$(dirname "$0")
,获取脚本所在的目录。 - 第七行:
if [ -z "$2" ]; then
,如果没有设置输出目录,将输出目录设置为默认目录。 - 第八行:
OUTDIR_PROTO=$2
,将设置的输出目录赋值给OUTDIR_PROTO
变量。 - 第九行:
NAME_PROTO=$1
,获取提供的文件名参数。 - 第十行:
protoc --cpp_out=. $NAME_PROTO
,使用protoc
命令将文件编译为C++代码。 - 十一行:
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解释器。 - 第二行:
# 检查是否提供了文件名参数
,检查是否提供了文件名参数。如果没有提供,输出用法说明并退出。 - 第四行:
# 设置输出目录
,设置输出目录。如果没有设置输出目录,输出默认输出目录。 - 第五行:
# 检查是否将输出目录设置
,检查是否将输出目录设置。如果没有设置,将输出目录设置为默认目录。 - 第六行:
OUTDIR_PROTO=$(dirname "$0")
,获取脚本所在的目录。 - 第七行:
if [ -z "$2" ]; then
,如果没有设置输出目录,将输出目录设置为默认目录。 - 第八行:
OUTDIR_PROTO=$2
,将设置的输出目录赋值给OUTDIR_PROTO
变量。 - 第九行:
NAME_PROTO=$1
,获取提供的文件名参数。 - 第十行:
protoc --cpp_out=. $NAME_PROTO
,使用protoc
命令将文件编译为C++代码。 - 十一行:
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