自动化脚本由 protobuf 生成 C++ 文件
2018-08-28 本文已影响17人
顽强的猫尾草
generate_cpp_py.sh 文件中:
#!/bin/bash
set -e
basepath=$(cd `dirname $0`; pwd)
cd ${basepath}
protopath=../proto/
cppoutpath=../proto/generatedcpp
if [ ! -d ${cppoutpath} ];then
mkdir ${cppoutpath}
fi
GRPC_CPP_PLUGIN=grpc_cpp_plugin
GRPC_CPP_PLUGIN_PATH=`which ${GRPC_CPP_PLUGIN}`
protoc -I=$protopath --cpp_out=${cppoutpath} $protopath/ps/*.proto
protoc -I=$protopath --cpp_out=${cppoutpath} $protopath/feeder/*.proto
set -e
命令用法总结如下:
- 当命令的返回值为非零状态时,则立即退出脚本的执行;
- 作用范围只限于脚本执行的当前进程,不作用于其创建的子进程;
- 若想根据命令执行的返回值输出对应的 log 时,最好不要采用
set -e
选项,而是通过配合exit
命令来达到输出 log 并退出执行的目的。
在命令行状态下单纯执行 $ cd `dirname $0`
是毫无意义的。因为他返回当前路径 .
。这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置。
if
语句块的使用方法见《shell中if语句的使用》,此处的作用是判断是否有此文件夹,若没有则创建。
which
命令用于搜索文件所在位置,which
与 whereis
的区别见《Linux命令搜索命令whereis与which的区别》。
最后就是 proto 的生成命令:
-
-I
是--proto_path
的缩写,指定要在其中搜索 import 的目录; -
--cpp_out
指定生成 C++ 头文件和源文件的目录。 - 最后指定了要使用的 proto 文件,生成的 C++ 文件的名字和这些 proto 文件名相对应。
运行脚本:
sh generate_cpp_py.sh