将ocamlmktop与ocamlbuild一起使用

将ocamlmktop与ocamlbuild一起使用,ocaml,ocamlbuild,ocamlfind,Ocaml,Ocamlbuild,Ocamlfind,我有一个使用ocamlbuild成功构建的项目。然而,我也希望通过toplevel与来自不同模块的项目的各个功能进行简单的交互,但是我尝试使用ocamlmktop并没有达到我想要的效果。我发现,除非手动将.cmi文件放入active directory中,否则会出现“未绑定模块”错误。我当前用于生成的命令是: ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo 有没有一

我有一个使用ocamlbuild成功构建的项目。然而,我也希望通过toplevel与来自不同模块的项目的各个功能进行简单的交互,但是我尝试使用ocamlmktop并没有达到我想要的效果。我发现,除非手动将.cmi文件放入active directory中,否则会出现“未绑定模块”错误。我当前用于生成的命令是:

ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo
有没有一种更好的、不太老套的方法可以让顶层在这个项目结构中工作,而不用将cmi文件移出_build目录

编辑:我已经发现,如果我以同样的方式运行toplevel,我可以让它加载类型和模块

./my_ocaml -I _build
但这似乎还是有问题的。有没有办法烘焙搜索路径或cmi文件


编辑2:我认为我的问题的解决方案实际上可能根本不是编译一个定制的顶级,因为接口文件有这样的限制。相反,我在.ocamlinit中添加了加载指令以使用模块。如果有人有更好的想法来解决这个问题,我将不胜感激。

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

Module1
Module2
subdir/Module3
然后构建目标
my_ocaml.top
将以预期的方式调用
ocamlmktop
,您可以运行生成的
my_ocaml.top
toplevel

这不会改变将
\u build
添加到包含路径的方式,以便类型检查器能够找到
.cmi
文件。当您通过传递命令行参数
-I\u build
调用顶层时,或者通过
#dir“\u build”从顶层调用时,可以执行此操作
--如果愿意,最后一个命令也可以放在
.ocamlinit