2017-04-25 160 views
1

我编译了ocaml 4.04.0的自定义版本(其他人写的)。我可以运行它并使用rlwrap和ledit与它交互,但我宁愿使用utop运行它。 (我不需要自动完成;命令编辑比在rtop或ledit更好。)与本地ocaml构建使用utop?

utop显然依赖于opam默认情况下,因为它运行使用opam switch设置ocaml的任何版本。但是,我很难找到有关utop和opam之间关系的任何文档,或者有关如何让utop运行尚未由opam设置的ocaml版本的文档。 man utop,opam --help,而重复的网页搜索没有任何结果。虽然这看起来不是个好主意,但我试着用自定义可执行文件替换.opam/4.04.0/bin中的文件ocaml,但是内置于可执行文件的额外软件包不可用,所以我猜测哪些是utop运行显然是错误的。我尝试用自定义ocaml文件作为参数运行utop:utop ./ocaml。我不认为这是可行的,基于乌托邦手册页,而事实并非如此。下一步似乎是阅读utop的资料,但作为ocaml的新手,我不愿意接受这种潜水,而且似乎不应该有必要。

如何使用我自己的ocaml可执行文件运行utop?

回答

3

Utop不依赖opam:utop直接构建在OCaml的编译器库之上。因此,它无论如何都不运行标准ocaml顶层。如果你想用你的定制版本的OCaml来使用utop,你需要使用相应的定制编译器库来构建一个版本的utop。

最简单的方法可能是创建自己的opam编译器条目,例如使用opam-compiler-conf,然后使用opam switch切换到此版本的编译器。

+2

谢谢octachron。作为你的解释的结果,我注意到在.opam下,对于ocaml的每个版本,我都有一个不同的utop可执行文件,我有'opam'切换到过去。因此,正如你的答案所暗示的,正在制定一个新的乌托邦特定的ocaml版本。这就解释了为什么utop知道要运行哪个ocaml版本:每个版本的utop只知道它的“自己的”ocaml版本。 – Mars