使用外部库(OASIS、OCamlfind)编译

Compiling with external library (OASIS, OCamlfind)

我有一个新项目正在尝试使用 OASIS 进行编译。除了一个,我所有的包都安装了 opam。

我的 _oasis 文件如下所示:

(* usual package fields *)

Executable myexe
  Path:       src
  BuildTools: ocamlbuild
  MainIs:     myexe.ml
  BuildDepends:
        some_packages_installed_with_opam
        mylocalpackage

我尝试了 oasis setup 然后 ./configure 但 OCamlfind 回答说找不到 mylocalpackage。所以我决定看看 OCamlfind 在哪里寻找包,发现你可以设置一个 OCAMLPATH 变量来添加可能安装包的目录。所以我做了 export OCAMLPATH=path_to_mylocalpackage:$OCAMLPATH 并再次尝试。

oasis setup 给我这个结果:

findlib: [WARNING] While parsing 'path_to_my_local_package/META.in': 
         The `directory' directive is required in this META definition

ocamlfind query mylocalpackage 给了我这个结果:

ocamlfind: Package `mylocalpackage' not found

我不知道我是否应该在 _oasis 中写下在哪里可以找到这个包,或者更改 OCAMLPATH 变量是否是解决方案。但如果是,我不明白这个警告。


重现步骤

对于那些想尝试的人:

好吧,这是您正在尝试的非常不标准的方法。不确定,为什么需要它,通常最好只安装软件包。无论如何,当您使用 OCAMLPATH 变量时,您需要将其传递到 lib 文件夹的路径,该文件夹包含分别包含 META 文件的文件夹。我有以下存储库结构:

.
├── proj
└── why3-0.88.3

proj 文件夹中,我是 运行 configure 具有以下 OCAMLPATH 的脚本:

OCAMLPATH=../why3-0.88.3/lib/:$OCAMLPATH ./configure

之后一切正常,您甚至不需要再将 OCAMLPATH 变量传递到编译、链接或执行阶段。