如何在 OCaml 中很好地管理编译?

Jac*_*ale 5 ocaml compilation

我正在学习更复杂的编译OCaml

首先我不是 C 程序员,我真的不知道什么是make,等等。我正在使用Mac OS X terminal,我也是一名 Java 程序员。

我发现,在OCaml中,有一些事情想ocamlcocamlbuildocamlfindoasis,等我非常被他们迷惑。


问题 1

谁能告诉我应该在ocamlc, ocamlbuild, ocamlfind, 中使用哪一个oasis


问题2

我试过这个教程http://nicolaspouillard.fr/ocamlbuild/ocamlbuild-user-guide.html,它对ocamlbuild.

但是,如果我想使用ocaml-batteries或等外部库camomile,我如何使用 链接这些库ocamlbuild


问题 3

这是一个关于所有外部库的更实际的问题。

所以对于很多 ocaml 库,我都opam install用来安装它们。

  1. 为什么需要安装一个库?我的意思是,在 Java 中,通常我们只是将 lib 复制到某个地方,然后将 lib 的路径包含到-classpath或 中-cp。那么为什么我们需要安装一个 OCaml 库呢?

  2. opam install一个lib之后,比如camomile(对于utf8),发生了什么,会发生什么?这种安装只是下载 lib 的源文件并将其复制到某个地方吗?

  3. 那怎么找图书馆呢?例如,如果我opam install camomile,那么我如何在我自己的代码中链接或使用它们?

  4. 通常如何使用ocaml library?例如,对于camomilehttp://camomile.sourceforge.net/dochtml/index.html)他们有三个模块:CamomileLibrary等。所以我应该open在我的代码中使用该模块,对吗?

小智 2

工具:

  • ocamlc:OCaml 到字节码编译器
  • ocamlopt:OCaml 到本机代码编译器
  • ocamlfind:ocamlc 和 ocamlopt 的包装器,用于编译/链接各种 OCaml 软件包,即您使用“ocamlfind ocamlopt -package camomile -c yourfile.ml”来编译 yourfile.ml,然后使用“ocamlfind ocamlopt -package camomile yourfile.cmx” -linkpkg -o yourfile' 创建可执行文件
  • oasis:类似于 autoconf&automake 的 C/C++ 构建系统生成器,但更简单

使用最近的 ocamlbuild,您可以使用“ocamlbuild -use-ocamlfind -pkg -pkg ...”作为使用 ocamlfind 包 package1、package2 构建项目的快速方法。下一步是使用“ocamlbuild -use-ocamlfind”并将 package() 指令放入 _tags 文件中。

不过我建议尝试 oasis,它简化了为您的项目创建构建系统的过程。如果您想了解使用 oasis 或 ocamlbuild 时“幕后”发生的情况,请参阅 _build/_log 文件。它包含所有 ocamlfind/ocamlc/ocamldep/ocamlopt 调用。

opam 问题可能属于一个单独的问题。