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

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

我发现在OCaml中,有些东西像ocamlcocamlbuildocamlfindoasis等。我对它们感到非常困惑。

问题1

谁能告诉我我应该在ocamlcocamlbuildocamlfindoasis中使用哪一个?

问题2

我尝试了本教程http://nicolaspouillard.fr/ocamlbuild/ocamlbuild-user-guide.html,这对ocamlbuild很有帮助。

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

问题3

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

因此,对于许多ocaml库,我使用opam install进行安装。

  • 为什么需要安装库?我的意思是,在Java中,通常我们只是将一个lib复制到某个地方,然后将lib的路径包含到-classpath-cp中。那为什么我们需要安装OCaml库?
  • opam install一个库(例如camomile(用于utf8))之后的
  • ,发生了什么以及将会发生什么?这种安装是否只是下载lib的源文件并将其复制到某处?
  • 怎么可以找到该库呢?例如,如果我opam install camomile,那么如何在我自己的代码中链接或使用它们?
  • 通常如何使用ocaml library?例如,对于camomile(http://camomile.sourceforge.net/dochtml/index.html),它们具有三个模块:CamomileLibrary等。因此,我应该在代码中对模块open进行编码,对吗?
  • 最佳答案

    工具:

  • ocamlc:OCaml到字节码编译器
  • ocamlopt:OCaml到 native 代码编译器
  • ocamlfind:围绕ocamlc和ocamlopt进行包装,以与各种OCaml软件包进行编译/链接,即,您使用“ocamlfind ocamlopt -package camomile -c yourfile.ml'与yourfile.ml进行编译,
    并使用'ocamlfind ocamlopt -package camomile yourfile.cmx -linkpkg -o yourfile'创建可执行文件
  • oasis:一个构建系统生成器,例如用于C/C++的autoconf&automake,但
  • 更为简单

    使用最新的ocamlbuild,您可以使用ocamlbuild -use-ocamlfind -pkg -pkg ...作为使用ocamlfind软件包package1,package2来构建项目的快速方法。
    下一步将使用'ocamlbuild -use-ocamlfind'并将package()指令放在_tags文件中。

    但是,我建议尝试使用oasis,它可以简化为您的项目创建构建系统的过程。
    如果要查看使用oasis或ocamlbuild时“幕后”的情况,请参见_build/_log文件。它包含所有ocamlfind/ocamlc/ocamldep/ocamlopt调用。

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

    10-06 16:16