我在OCaml opam repository 中看到了base-unix
个包。它被描述为“与OCaml编译器一起分发的Unix库”。与OCaml编译器一起分发的一些其他库没有自己的包。例如,base-str
库没有str
包这样的东西。
为什么会有这样的差异?据我所知,在使用ocamlfind
或ocamlbuild
进行编译时,它们都需要在命令行中指定为包或库。
答案 0 :(得分:6)
具有OPAM包名称base-XXX的库是可选库:它们来自OCaml编译器本身,但它们可能安装也可能不安装,具体取决于计算机环境,操作系统的os和构建配置标志。例如,base-unix的存在意味着unix库在该环境中可用。
另一方面,str库不依赖于系统,因此可以在安装OCaml的任何地方使用。因此,OPAM不需要明确地提供其基本包来告诉库的存在。
虽然所有OCaml安装都存在str,但它的链接不是自动的。这就是为什么ocamlfind需要一个包。
OPAM包用于通过opam命令进行安装。 OCamlFind包用于链接。他们是相关但不同的。令人困惑,但这就是我们目前在OCaml生态系统中所拥有的。