プロトコル バッファ ファイルがサブディレクトリにあるプロジェクトで FindProtobuf モジュールを使用しています。そのサブディレクトリにある CMakeLists.txt ファイルで protoc を呼び出して CPP ファイルを生成する必要があります。私のプロジェクトのフォルダー構造は次のようになります。
cammy/CMakeLists.txt # Root CMakeLists.txt
cammy/protofiles/test.proto # protofile
cammy/protofiles/CMakeLists.txt
protobuf フォルダーの CMakeLists.txt ファイルに、include(FindProtobuf)、find_package 呼び出し、および PROTOBUF_GENERATE_CPP の呼び出しがあります。
実行可能ビルド ステップはルート CMakeLists.txt ファイルにあり、生成されたファイルをこのファイルのターゲット実行可能ファイルに追加します。
add_executable( ${EXEC} ${SRCS} ${PROTO_SRC} ${PROTO_HEADER} )
target_link_libraries( ${EXEC} ${PROTOBUF_LIBRARIES} )
どちらもルート CMakeLists.txt で定義されています
cmake を実行すると、生成されたソースを実行可能ファイルに明示的に結び付けて依存関係を作成しているにもかかわらず、protoc を実行してソース ファイルを生成しません。
protofiles フォルダーの CMakeLists.txt のすべてのコンテンツをルート CMakeLists.txt に移動すると、proto ファイルがコンパイルされます。
誰でもこれで私を助けることができますか?protofiles フォルダーに作成された CMakeLists.txt ファイルにすべてのプロトコル バッファー ビルドを入れたいと思います。
また、内側の CMakeLists.txt で生成された変数 ( PROTO_SRC など) は、印刷時に内側のファイルで定義されていることに気付きました (つまり、正しい生成された CPP ファイル名を取得します) が、同じ変数をルート ファイルに印刷すると..空です。 . 変数をルートフォルダーに「エクスポート」する必要があるかのようです( cmake に方法があった場合)。
どんな助けでも大歓迎です。
ありがとうカルティック