Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本地ocaml构建中使用utop?_Ocaml_Opam_Utop - Fatal编程技术网

在本地ocaml构建中使用utop?

在本地ocaml构建中使用utop?,ocaml,opam,utop,Ocaml,Opam,Utop,我已经编译了OCAML4.04.0的自定义版本(由其他人编写)。我可以使用rlwrap和ledit运行它并与之交互,但我更愿意使用utop运行它。(我不需要自动完成;命令编辑在utop中比在rlwrap或ledit中更好。) 默认情况下,utop显然依赖于opam,因为它运行使用opam开关设置的任何版本的ocaml。然而,我很难找到任何关于utop和opam之间关系的文档,或者关于如何让utop运行opam尚未设置的ocaml版本的文档man-utop,opam--help,以及重复的网络搜索

我已经编译了OCAML4.04.0的自定义版本(由其他人编写)。我可以使用rlwrap和ledit运行它并与之交互,但我更愿意使用utop运行它。(我不需要自动完成;命令编辑在utop中比在rlwrap或ledit中更好。)

默认情况下,utop显然依赖于opam,因为它运行使用
opam开关设置的任何版本的ocaml。然而,我很难找到任何关于utop和opam之间关系的文档,或者关于如何让utop运行opam尚未设置的ocaml版本的文档
man-utop
opam--help
,以及重复的网络搜索都没有找到任何结果。虽然这似乎是个坏主意,但我只是尝试用自定义可执行文件替换.opam/4.04.0/bin中的文件ocaml,但内置到可执行文件中的额外包当时不可用,因此我对utop运行的内容的猜测显然是错误的。我尝试以自定义ocaml文件作为参数运行utop:
utop./ocaml
。基于utop手册页,我认为这不可行,但事实并非如此。下一步似乎是阅读utop源代码,但作为ocaml的新手,我不愿意这样做,而且似乎没有必要这样做


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

utop不依赖于opam:utop直接构建在ocaml的编译器库之上。因此,它无论如何都不会运行标准的ocaml顶级。如果希望将utop与自定义版本的OCaml一起使用,则需要使用相应的自定义编译器库构建一个版本的utop


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

谢谢octachron。根据您的解释,我注意到在.opam下,对于我过去切换到的每个版本的ocaml,
opam,都有一个不同的utop可执行文件。因此,正如您的回答所暗示的,一个新的utop是针对ocaml版本的。这就解释了为什么utop知道运行哪个版本的ocaml:每个版本的utop只知道自己的ocaml版本。