使用ocamlmktop和ocamlbuild

时间:2017-03-09 02:59:10

标签: ocaml ocamlbuild ocamlfind

我有一个使用ocamlbuild成功构建的项目。但是,我还希望能够通过顶层方式与不同模块中项目的各个功能进行交互,但我尝试使用ocamlmktop避免了我想要的。我发现除非我手动将.cmi文件放在活动目录中,否则我会得到一个" Unbound模块"错误。我目前用于构建的命令是:

ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo

在不将cmi文件移出_build目录的情况下,是否有一种更好,更少hacky的方法来让这个项目结构中的顶层工作?

编辑:我已经发现如果我运行toplevel作为

我可以加载类型和模块
./my_ocaml -I _build

但这仍然看起来很糟糕。有没有办法烘焙搜索路径或cmi文件?

编辑2:我认为我的问题的解决方案可能实际上并不是根据接口文件的这种限制来编译自定义顶层。我已经在我的.ocamlinit中添加了load指令来使用这些模块。如果有人有更好的想法来解决这个问题,我会非常感激。

1 个答案:

答案 0 :(得分:1)

您可以通过在my_ocaml.mltop文件中列出所需的模块名称来构建顶层:

Module1
Module2
subdir/Module3

然后构建目标my_ocaml.top将以预期方式调用ocamlmktop,您可以运行生成的my_ocaml.top顶层。

这不会改变您需要将_build添加到包含路径的方式,以便类型检查器能够找到.cmi文件。您可以通过传递命令行参数-I _build或从带有#dir "_build";;的顶层调用顶层来执行此操作 - 如果您还可以将最后一个命令放入.ocamlinit偏爱。