0

Google プロトコル バッファの .proto 記述から .pb.cc および .pb.hh ファイルをビルドする方法を automake に自動的に決定させようとしましたが、うまくいきませんでした。

SOでこの投稿を使用してみましたが、まだ機能しません。

これは私の Makefile.am からの抜粋です。

PROTOC=@ac_protoc_cmd@
%.pb.h %.pb.cc: %.proto
    $(PROTOC) --proto_dir=$(srcdir)/proto --cpp_out=$(srcdir) $(srcdir)/proto/$<

libtass_a_SOURCES = \
    $(srcdir)/tass.pb.cc

nobase_include_HEADERS = \
    $(srcdir)/tass.pb.h

make を実行しようとすると、次のようになります。

> Making all in src 
> make[1]: Entering directory `/project/tass/src'
> make[1]: *** No rule to make target `tass.pb.cc', needed by `tass.pb.o'. Stop.  
> make[1]: Leaving directory `/project/tass/src'
> make: *** [all-recursive] Error 1

ac_proto_cmd には、configure.ac が GPB 依存関係のチェックを行うときに、protoc バイナリへのパスが入力されます。GPB ライブラリを保持する場所である "/opt/common/protobuf/-VERSION-/bin/protoc" の形式であることを確認しました。

.proto ファイルを src/proto に保持し、protoc にコンパイル済みの cc および h ファイルを src に吐き出させようとしています。ただし、.proto ファイルを src/ に移動しても機能しないため、それは問題ではないと思います。私が知る限り、make は protoc を呼び出そうとさえしていないので、make によってルールが正しく解釈されているかどうかはわかりません。

これについて何か助けてくれてありがとう。

4

2 に答える 2

1

ここでの問題は、ビルドの依存関係です。automake は、コンパイルの副作用として依存関係を検出するためです (回避策の説明については、 http: //www.gnu.org/software/automake/manual/html_node/Sources.html を参照してください)。この行を追加する必要があります:

BUILT_SOURCES = $(srcdir)/tass.pb.cc
于 2014-03-04T16:57:23.530 に答える