【问题标题】:Issue running the protobuf compiler on nested directories of proto files在 proto 文件的嵌套目录上运行 protobuf 编译器的问题
【发布时间】:2017-08-30 00:16:39
【问题描述】:

我有几个嵌套目录,每个目录都包含 proto 文件,并且许多 proto 文件依赖于位于根目录中某处的其他 proto。我正在使用这个脚本来尝试编译它们,并从一个目录中执行它,该目录包含带有 protos 的文件夹和我希望编译的 proto 类所在的文件夹。我现在遇到的问题之一是我收到了 protoc: command not found 错误。

set -e

BASEDIR="$(greadlink -f $(dirname $0))"
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

关于如何最好地做到这一点的任何想法?

【问题讨论】:

    标签: bash shell protocol-buffers protoc proto


    【解决方案1】:

    忘记发布我是如何解决这个问题的。这成功了(基本上只是用 -I 列出所有可能的子目录)

    #!/bin/bash
    set -e
    
    BASEDIR="$(greadlink -f $(dirname $0))"
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2018-02-15
      相关资源
      最近更新 更多