2

ocamlbuild を使用して piqi を自動的に呼び出し、 protobuf定義から ocaml モジュールを生成しようとしています。%.protobufこれは、ファイルからに移動し%.proto.piqi、最後にに移動する必要がある 2 段階のプロセス%_piqi.mlです。

最初のステップのルールは次のようになります。

rule "piqi: .proto -> .piqi"
  ~dep:"%.proto"
  ~prod:"%.proto.piqi"
  begin fun env build ->
    Cmd (S [ A piqi ; A "of-proto"
           ; A "-I"; P protobuf_include
           ; P (env "%.proto") ]
        )
  end;

しかし、個々のファイルがソース内で相互にインポートされるため、%.proto.piqiターゲットは実際にはソース ディレクトリ内のすべての「*.proto」ファイルに依存しているため、これは機能しません。.protoしかし、この依存関係を ocamlbuild で表現する方法がわかりません。_build1 つだけではなく、すべての proto ファイルがコピーされていれば十分です。~dep

4

1 に答える 1

1

ルール アクション内からファイルを呼び出すbuildと、ターゲットの動的な依存関係として登録されます。現在のファイルによってアクセスされる可能性があることがわかっているすべてのファイルをループすることができ*.protoます (ソースディレクトリをグロブするか、それが利益をもたらす場合はより巧妙に include ステートメントを解析します) build

(このソリューションを考える別の方法は、foo.protoからの前処理ステップによって生成されたファイルが必要な場合は、実際にそれを呼び出すfoo.proto.pp必要があるコンパイルが必要になることに注意することです。)foo.protobuild

新しいマニュアル ドラフトの動的依存関係セクションを参照してください。

PS:protobufについては何も知りませんが、依存関係のリストを何らかの形式で提供するprotoc --helpようです。それを解析してそれらすべてを呼び出すと、優れた堅牢なルールが得られます。protoc --include-imports --descriptor_set_out FILE.protobuild

于 2015-10-29T14:08:45.333 に答える