不使用corebuild可以使用Core编译OCaml代码吗?

时间:2018-07-07 13:57:08

标签: ocaml core

我正在使用Ubuntu 18.04。我安装了OCaml 4.05(通过apt-get)以及utop和Core(通过opam)。这就是我的~/.ocamlinit的内容:

(* Added by OPAM. *)
let () =
  try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
  with Not_found -> ()
;;

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;

编译使用Core的OCaml代码与corebuild可以很好地工作。但是,它不适用于普通ocamlc或ocamlopt。他们抱怨:

  

错误:未绑定的模块核心

我发现corebuild非常挑剔。它不喜欢同一目录中的任何现有非OCaml代码:

SANITIZE: a total of 12 files that should probably not be in your source tree
  has been found. A script shell file "/home/anta40/Codes/_build/sanitize.sh"
  is being created. Check this script and run it to remove unwanted files or
  use other options (such as defining hygiene exceptions or using the
  -no-hygiene option).
IMPORTANT: I cannot work with leftover compiled files.
ERROR: Leftover object files:
  File hellod.o in . has suffix .o
  File helloscheme_.o in . has suffix .o
  File nqueens.o in . has suffix .o
  File helloscheme.o in . has suffix .o
  File HelloHS.o in . has suffix .o
  File helloml.o in . has suffix .o
ERROR: Leftover OCaml compilation files:
  File nqueens.cmo in . has suffix .cmo
  File helloml.cmo in . has suffix .cmo
  File helloml.cmi in . has suffix .cmi
  File nqueens.cmi in . has suffix .cmi
  File nqueens.cmx in . has suffix .cmx
  File helloml.cmx in . has suffix .cmx
Exiting due to hygiene violations.
Compilation unsuccessful after building 0 targets (0 cached) in 00:00:00.

使用-no-hygiene选项,例如corebuild sum.ml -no-hygiene不会产生任何本机可执行文件。有什么解决方法吗?  `

2 个答案:

答案 0 :(得分:0)

OPAM软件包管理器可以支持多个OCaml实例,其中每个实例将一个OCaml安装(primeng 6.0.0-beta.1.ocamlocamlc等)与已安装的软件包分组。每个实例都称为 switch

键入ocamlopt以查看实例列表。在开关方面,使用软件包(apt-get)进行OCaml的安装称为 system

最好避免将系统安装和OPAM安装混合使用。我建议您创建一个新的开关,确保OPAM设置正确来源,然后将Core安装到新的开关中:

ocaml switch

自动构建工具假定它们控制整个构建过程,并且在发现其他编译结果时会抱怨。通常,运行建议的shell脚本并重试可以避免该问题,即使只是发现另一个脚本也是如此。您的第二个问题(opam switch 4.06.1 eval $(opam config env) opam install core )可能与安装问题有关。

答案 1 :(得分:0)

您的安装已过时。

我想您遵循了Real World OCaml中的说明,但是OCaml生态系统自RWO第一版以来已经发生了变化。要进行现代化安装,您应该遵循Real World OCaml https://dev.realworldocaml.org/install.html的开发版本。

要回答您的问题,corebuild是ocamlbuild的一个很好的包装。要使用corebuild从// implementation 'org.apache.poi:poi-ooxml:3.17' 构建可执行文件,您应该使用

  

corebuild sum.native

对于本机可执行文件或

  

corebuild sum.byte

用于字节码编译

否则,您可以通过ocamlfind调用ocamlopt:

  

ocamlfind ocamlopt -package核心sum.ml

最后,如果您打算构建更大的项目,则应该对https://jbuilder.readthedocs.io/en/latest/overview.html沙丘。