Ocamlbuild将依赖项复制到_build

时间:2015-10-23 17:06:26

标签: ocaml ocamlbuild

我尝试使用ocamlbuild自动调用piqi从protobuf定义生成ocaml模块。这是一个两步过程,我必须从%.protobuf文件转到%.proto.piqi,最后转到%_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中表达它们之间的这种依赖关系。如果将所有原始文件复制到_build而不仅仅是~dep

中的文件就足够了

1 个答案:

答案 0 :(得分:0)

从规则操作内部对文件调用build会将其注册为目标的动态依赖关系。你可以循环遍历你知道可能被当前文件访问的所有*.proto文件(或者使用源目录,或者更巧妙地,如果它有任何好处,解析include语句)和build它们

(考虑这个解决方案的另一种方法是注意,如果你想通过foo.proto的某些预处理步骤生成一些foo.proto.pp文件,那么你需要任何编译需要{{} 1}}实际上在其上调用foo.proto。)

请参阅新手册草稿的dynamic dependencies部分。

P.S。:我对protobuf一无所知,但是从build看来protoc --help可能会以某种格式给出protoc --include-imports --descriptor_set_out FILE依赖项的列表。解析它并在所有这些上调用.proto,并且你有一个很好的强大规则。