14

.proto 入力ファイルからgoogle protobuf .h/.cc ファイルを生成するカスタム ビルド ステップVisual Studioプロジェクト ファイルに追加しました。しかし、proto ファイルの内容が変更された場合にのみコンパイルを開始できるかどうか疑問に思っていました。

カスタムビルドステップからVisualStudioに正確に伝える方法はありますか? プロト ファイルをビジュアル スタジオ ビルド ソリューションに統合する最適な方法は何ですか?

現時点では、すべてのビルドで .proto ファイルが更新され、出力 .h/.cc ファイルのタイムスタンプも更新されます。これにより、それに依存するすべてのファイルが再コンパイルされます。ビジュアルスタジオから直接構築しながら、それを回避するより良い方法はありますか?

4

2 に答える 2

16

カスタム ビルド ツールを指定するには、次の詳細な手順に従ってください。

proto ファイルが標準プロジェクト構成で .h/.cpp ファイルと一緒に存在することを考慮して、カスタム ビルド ツールに挿入する値を次に示します。

Command Line: 
path\to\protoc --proto_path=$(ProjectDir) --cpp_out=$(ProjectDir) %(FullPath)
Outputs: 
$(ProjectDir)%(Filename).pb.h;$(ProjectDir)%(Filename).pb.cc

非推奨のマクロ ($(InputDir) や $(InputName) など) の一部を置き換えたアイテム メタデータ マクロの使用に注意してください。

プロトコル バッファ コンパイラは、入力ファイル (つまり、%(FullPath)) が「出力」よりも新しい場合にのみ実行されます。

于 2012-10-23T12:50:31.163 に答える
3

多分これは役に立ちます。特にIgorZavoychinskiyの投稿を見てください。

この厄介な問題の解決策は実際には簡単です。出力セクションでフルパスを指定する必要があります。これはどこにも明示的に記載されていませんが、このチェッカーがないとファイルが見つからないため、ファイルが存在しないと見なされます。たとえば、出力セクションをコンパイルするプロトバッファの場合、次のようになります。

$(InputDir)\ $(InputName).pb.cc; $(InputDir)\ $(InputName).pb.h

そして(多分?)kmote00:

...結論:「出力」エントリが(ユーザー定義の)「OutputFile」プロパティのデフォルト値と正確に一致していることを確認する必要がありました。(ありがたいことに、これにより2パスビルドの必要性もなくなりました。これは、以前私が我慢していたもう1つの煩わしさでした。)

于 2012-07-13T11:07:19.317 に答える