使用外部库(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
变量是否是解决方案。但如果是,我不明白这个警告。
重现步骤
对于那些想尝试的人:
下载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
好吧,这是您正在尝试的非常不标准的方法。不确定,为什么需要它,通常最好只安装软件包。无论如何,当您使用 OCAMLPATH
变量时,您需要将其传递到 lib 文件夹的路径,该文件夹包含分别包含 META
文件的文件夹。我有以下存储库结构:
.
├── proj
└── why3-0.88.3
在 proj
文件夹中,我是 运行 configure
具有以下 OCAMLPATH 的脚本:
OCAMLPATH=../why3-0.88.3/lib/:$OCAMLPATH ./configure
之后一切正常,您甚至不需要再将 OCAMLPATH
变量传递到编译、链接或执行阶段。
我有一个新项目正在尝试使用 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
好吧,这是您正在尝试的非常不标准的方法。不确定,为什么需要它,通常最好只安装软件包。无论如何,当您使用 OCAMLPATH
变量时,您需要将其传递到 lib 文件夹的路径,该文件夹包含分别包含 META
文件的文件夹。我有以下存储库结构:
.
├── proj
└── why3-0.88.3
在 proj
文件夹中,我是 运行 configure
具有以下 OCAMLPATH 的脚本:
OCAMLPATH=../why3-0.88.3/lib/:$OCAMLPATH ./configure
之后一切正常,您甚至不需要再将 OCAMLPATH
变量传递到编译、链接或执行阶段。