自动化脚本由 protobuf 生成 C++ 文件

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 命令用法总结如下:

  1. 当命令的返回值为非零状态时,则立即退出脚本的执行;
  2. 作用范围只限于脚本执行的当前进程,不作用于其创建的子进程;
  3. 若想根据命令执行的返回值输出对应的 log 时,最好不要采用 set -e 选项,而是通过配合 exit 命令来达到输出 log 并退出执行的目的。

在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径 .。这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置。

if 语句块的使用方法见《shell中if语句的使用》,此处的作用是判断是否有此文件夹,若没有则创建。

which 命令用于搜索文件所在位置,whichwhereis 的区别见《Linux命令搜索命令whereis与which的区别》。

最后就是 proto 的生成命令:

  • -I--proto_path 的缩写,指定要在其中搜索 import 的目录;
  • --cpp_out 指定生成 C++ 头文件和源文件的目录。
  • 最后指定了要使用的 proto 文件,生成的 C++ 文件的名字和这些 proto 文件名相对应。

运行脚本:

sh generate_cpp_py.sh

你可能感兴趣的:(自动化脚本由 protobuf 生成 C++ 文件)