我有一个使用ocamlbuild成功构建的项目。然而,我也想要一种简单的方式来通过toplevel与来自不同模块的项目的各个函数进行交互,但是我使用ocamlmktop的尝试并没有像我希望的那样工作。我发现,除非我手动将.cmi文件放到活动目录中,否则我会得到一个“未绑定的模块”错误。我目前用来构建的命令是:
ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo有没有一种更好的、不那么繁琐的方法来让顶层在这个项目结构中工作,而不是把cmi文件移出_build目录?
编辑:我已经计算出,如果我运行toplevel,我可以让它加载类型和模块。
./my_ocaml -I _build但这看起来仍然很老套。有没有办法烘焙搜索路径或cmi文件?
编辑2:我认为我的问题的解决方案实际上可能是根本不编译一个自定义的顶层,因为接口文件有这样的限制。相反,我将load指令添加到我的.ocamlinit以使用这些模块。如果有人有更好的想法来解决这个问题,我将不胜感激。
发布于 2017-03-10 11:08:32
您可以通过在my_ocaml.mltop文件中列出所需的模块名称来构建顶层:
Module1
Module2
subdir/Module3然后,构建目标my_ocaml.top将以预期的方式调用ocamlmktop,您可以运行结果my_ocaml.top toplevel。
这不会更改您需要将_build添加到包含路径以使类型检查器能够找到.cmi文件的方式。您可以在通过传递命令行参数-I _build调用toplevel时执行此操作,或者使用#dir "_build";;从toplevel调用--如果您愿意,也可以将最后一个命令放入.ocamlinit中。
https://stackoverflow.com/questions/42685864
复制相似问题