我正在学习 OCaml
中更复杂的编译。
首先我不是一个C程序员,我真的不知道什么是make
等。我使用的是Mac OS X终端
而且我也是Java 程序员。
我发现在 OCaml 中,有一些东西,例如 ocamlc
、ocamlbuild
、ocamlfind
、oasis
等.我对他们感到非常困惑。
问题1
谁能告诉我应该使用 ocamlc
、ocamlbuild
、ocamlfind
、oasis
中的哪一个?
问题2
我尝试了这个教程http://nicolaspouillard.fr/ocamlbuild/ocamlbuild-user-guide.html ,这对于ocamlbuild
很有用。
但是,如果我想使用 ocaml-batteries
或 camomile
等外部库,如何使用 ocamlbuild
链接这些库?
问题3
这是一个关于所有外部库的更实际的问题。
因此,对于许多 ocaml 库,我使用 opam install
来安装它们。
为什么需要安装库?我的意思是,在Java中,通常我们只是将lib复制到某个地方,然后将lib的路径包含到
-classpath
或-cp
中。那为什么我们需要安装 OCaml 库呢?在
opam安装
一个库之后,例如camomile
(对于utf8),发生了什么以及将会发生什么?这种安装只是下载一个lib的源文件并将其复制到某个地方吗?那怎样才能找到这个库呢?例如,如果我
opam install camomile
,那么如何在我自己的代码中链接或使用它们?通常如何使用
ocaml库
?例如,对于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:类似于 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 问题可能属于一个单独的问题。
关于compilation - 如何在 OCaml 中很好地管理编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195873/