我有一个使用ocamlbuild成功构建的项目 . 但是,我还想通过一个简单的方法从不同的模块通过顶层与项目的各个功能进行交互,但是我使用ocamlmktop的尝试并没有像我想的那样成功 . 我发现除非我手动将.cmi文件放在活动目录中,否则会出现“未绑定模块”错误 . 我目前用来构建的命令是:
ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo
有没有更好的,更少的hacky方式来让这个项目结构中的顶层工作,而不将cmi文件移出_build目录?
编辑:我已经发现,如果我运行toplevel,我可以加载类型和模块
./my_ocaml -I _build
但这似乎仍然是hacky . 有没有办法烘焙搜索路径或cmi文件?
编辑2:我认为我的问题的解决方案实际上可能不是根据接口文件的这种限制编译自定义顶层 . 我已经在我的.ocamlinit中添加了load指令来使用这些模块 . 如果有人有更好的想法来解决这个问题,我将非常感激 .
1 回答
您可以通过在
my_ocaml.mltop
文件中列出所需的模块名称来构建顶层:然后构建目标
my_ocaml.top
将以预期的方式调用ocamlmktop
,并且您可以运行生成的my_ocaml.top
toplevel .这不会改变您需要将
_build
添加到包含路径的方式,以便类型检查器能够找到.cmi
文件 . 您可以通过传递命令行参数-I _build
来调用顶层,或者使用#dir "_build";;
从顶层调用 - 如果您愿意,也可以将最后一个命令放在_587952中 .