为什么一些标准的ocaml库是opam包而有些不是?

时间:2014-06-05 07:10:57

标签: ocaml opam ocamlfind

我在OCaml opam repository 中看到了base-unix个包。它被描述为“与OCaml编译器一起分发的Unix库”。与OCaml编译器一起分发的一些其他库没有自己的包。例如,base-str库没有str包这样的东西。

为什么会有这样的差异?据我所知,在使用ocamlfindocamlbuild进行编译时,它们都需要在命令行中指定为包或库。

1 个答案:

答案 0 :(得分:6)

具有OPAM包名称base-XXX的库是可选库:它们来自OCaml编译器本身,但它们可能安装也可能不安装,具体取决于计算机环境,操作系统的os和构建配置标志。例如,base-unix的存在意味着unix库在该环境中可用。

另一方面,str库不依赖于系统,因此可以在安装OCaml的任何地方使用。因此,OPAM不需要明确地提供其基本包来告诉库的存在。

虽然所有OCaml安装都存在str,但它的链接不是自动的。这就是为什么ocamlfind需要一个包。

OPAM包用于通过opam命令进行安装。 OCamlFind包用于链接。他们是相关但不同的。令人困惑,但这就是我们目前在OCaml生态系统中所拥有的。