2017-04-25 158 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