使用外部库进行编译(OASIS,OCamlfind)

时间:2018-05-28 12:51:01

标签: ocaml ocamlfind oasis

我有一个新项目,我试图用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变量是否是解决方案。但如果是的话,我不理解这个警告。

重现的步骤

对于那些想尝试的人:

  • 下载why3

  • ./configure --enable-local
    make
    
  • 使用此_oasis文件

    创建新项目
    OASISFormat: 0.4
    Name:        myexe
    Version:     0.1
    Synopsis:    test file
    Authors:     SO
    License:     CC-BY-NC-SA
    Plugins:     StdFiles (0.4), DevFiles (0.4)
    Alphafeatures:          ocamlbuild_more_args
    XOCamlbuildExtraArgs:
      -use-ocamlfind
    
    Executable myexe
      Path:       src
      BuildTools: ocamlbuild
      MainIs:     myexe.ml
      BuildDepends:
            unix,
            str,
            num,
            dynlink,
            zip,
            menhirLib,
            why3
      NativeOpt:            -dtypes -g -annot
      ByteOpt:              -dtypes -g -annot
      CompiledObject:       best
    
  • oasis setup
    ./configure
    
  • 您应该出现此错误:ocamlfind: Package 'why3' not found

1 个答案:

答案 0 :(得分:1)

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

.
├── proj
└── why3-0.88.3

并在proj文件夹中,我使用以下OCAMLPATH运行configure脚本:

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

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