Ocamlbuild将依赖项复制到_build
我试图使用ocamlbuild自动调用,从protobuf定义生成ocaml模块。这是一个两步过程,我必须从Ocamlbuild将依赖项复制到_build,ocaml,ocamlbuild,Ocaml,Ocamlbuild,我试图使用ocamlbuild自动调用,从protobuf定义生成ocaml模块。这是一个两步过程,我必须从%.protobuf文件到%.proto.piqi,最后到%\u piqi.ml 我的第一步规则如下所示: rule "piqi: .proto -> .piqi" ~dep:"%.proto" ~prod:"%.proto.piqi" begin fun env build -> Cmd (S [ A piqi ; A "of-proto"
%.protobuf
文件到%.proto.piqi
,最后到%\u 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中表达它们之间的依赖关系。如果复制到\u build
的所有原型文件,而不仅仅是~dep
中的一个,从规则操作内部对文件调用build
,将其注册为目标的动态依赖项,这就足够了。您只需遍历当前目录可能访问的所有*.proto
文件(可以全局搜索源目录,或者更聪明地分析include语句),然后构建它们
(考虑此解决方案的另一种方法是指出,如果您希望通过某个预处理步骤从foo.proto.pp
生成一些foo.proto
文件,那么您需要任何需要foo.proto
的编译来实际调用build
)
请参阅新手册草稿的一节
注:我对protobuf一无所知,但从protoc--help
看,它似乎是protoc--include imports--descriptor\u set\u out FILE
可以以某种格式为您提供.proto
依赖项列表。解析并调用build
,您就得到了一个好的、健壮的规则