在 proto 文件的嵌套目录上发布 运行 protobuf 编译器
Issue running the protobuf compiler on nested directories of proto files
我有几个嵌套目录,每个目录都包含 proto 文件,并且许多 proto 文件都依赖于位于根目录某处的其他 proto。我正在使用这个脚本来尝试编译它们,并从一个目录中执行它,该目录既包含带有原型的文件夹,也包含我希望编译的原型 类 所在的文件夹。我现在遇到的问题之一是出现 protoc: command not found
错误。
set -e
BASEDIR="$(greadlink -f $(dirname [=11=]))"
PROTO_DIR="$BASEDIR/new-protos-aug/"
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/"
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR"
FILES=$(find new-protos-aug -type f -name "*.proto")
for proto in $FILES; do
PATH=${proto///[^ ]*\.proto/};
PROTO_DIR="$BASEDIR/$PATH/"
protoc -I=$PROTO_DIR --swift_out=$SWIFTPROTO_DIR $proto;
done
关于如何最好地做到这一点有什么想法吗?
忘了post我是如何解决这个问题的。这起到了作用(基本上只是用 -I 列出每个可能的子目录)
#!/bin/bash
set -e
BASEDIR="$(greadlink -f $(dirname [=10=]))"
PROTO_DIR="$BASEDIR/new-protos-aug/"
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/"
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR"
FILES=$(find new-protos-aug -type f -name "*.proto")
for proto in $FILES; do
echo $proto;
echo "Running in $PROTO_DIR"
protoc -I="new-protos-aug" -I="new-protos-aug/bgs/low/pb/client" -I="new-protos-aug/bgs/low/pb/client/client" -I="new-protos-aug/bgs/low/pb/client/global_extensions" -I="new-protos-aug/bgs/low/pb/client/client/v1" -I="new-protos-aug/bgs/low/pb/client/client/v2" -I="new-protos-aug/google/protobuf" --swift_out="$SWIFTPROTO_DIR" "$proto";
done
我有几个嵌套目录,每个目录都包含 proto 文件,并且许多 proto 文件都依赖于位于根目录某处的其他 proto。我正在使用这个脚本来尝试编译它们,并从一个目录中执行它,该目录既包含带有原型的文件夹,也包含我希望编译的原型 类 所在的文件夹。我现在遇到的问题之一是出现 protoc: command not found
错误。
set -e
BASEDIR="$(greadlink -f $(dirname [=11=]))"
PROTO_DIR="$BASEDIR/new-protos-aug/"
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/"
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR"
FILES=$(find new-protos-aug -type f -name "*.proto")
for proto in $FILES; do
PATH=${proto///[^ ]*\.proto/};
PROTO_DIR="$BASEDIR/$PATH/"
protoc -I=$PROTO_DIR --swift_out=$SWIFTPROTO_DIR $proto;
done
关于如何最好地做到这一点有什么想法吗?
忘了post我是如何解决这个问题的。这起到了作用(基本上只是用 -I 列出每个可能的子目录)
#!/bin/bash
set -e
BASEDIR="$(greadlink -f $(dirname [=10=]))"
PROTO_DIR="$BASEDIR/new-protos-aug/"
SWIFTPROTO_DIR="$BASEDIR/new-swift-protos-aug/"
echo "Converting files from $PROTO_DIR to $SWIFTPROTO_DIR"
FILES=$(find new-protos-aug -type f -name "*.proto")
for proto in $FILES; do
echo $proto;
echo "Running in $PROTO_DIR"
protoc -I="new-protos-aug" -I="new-protos-aug/bgs/low/pb/client" -I="new-protos-aug/bgs/low/pb/client/client" -I="new-protos-aug/bgs/low/pb/client/global_extensions" -I="new-protos-aug/bgs/low/pb/client/client/v1" -I="new-protos-aug/bgs/low/pb/client/client/v2" -I="new-protos-aug/google/protobuf" --swift_out="$SWIFTPROTO_DIR" "$proto";
done