2017-08-30 19 views
0

それぞれにprotoファイルを含むいくつかのネストされたディレクトリがあり、protoファイルの多くはルートディレクトリのどこかにある他のprotoに依存します。私はこのスクリプトを使ってコンパイルしようとしていて、protosのあるフォルダとコンパイルされたprotoのクラスを入れるフォルダの両方を含むディレクトリから実行しています。私が今抱えている問題の1つは、protoc: command not foundエラーが発生していることです。protoファイルのネストされたディレクトリに対してprotobufコンパイラを実行すると問題が発生する

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 

これを行うにはどうすればよいですか?

答えて

0

私はこれをどのように解決したのかを忘れてしまった。これはトリックでした(基本的に-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 
関連する問題