2

我有一个正在尝试使用 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变量是否是解决方案。但如果是这样,我不明白这个警告。


重现步骤

对于那些想尝试的人:

  • 下载为什么3

  • ./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
4

1 回答 1

1

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

.
├── proj
└── why3-0.88.3

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

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

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

于 2018-05-31T19:27:05.300 回答