我正在尝试使用ocamlbuild
而不是make
,但我无法将我的目标文件与外部.cma
库正确链接。似乎ocamlbuild
首先尝试确定依赖关系,然后忽略-L/path/to/lib.cma
. make
我只是将所有必要的目录与-I
和-L
标志一起传递给,ocamlc
但这些似乎不起作用ocamlbuild
-ocamlc
因为找不到必要的库,所以一直失败。
问问题
1951 次
1 回答
9
您至少有 2 种方法可以将参数传递给 ocamlbuild,以便它考虑您的库:
可以使用 ocamlbuild 的命令行参数:
$ ocamlbuild -cflags '-I /path/to/mylibrary' -lflags '-I /path/to/mylibrary mylibrary.cma' myprogram.byte
替换为本
.cma
机.cmxa
可执行文件。使用 myocamlbuild.ml 文件让 ocamlbuild “了解”该库,并在 _tag 文件中标记需要它的文件:
在
myocamlbuild.ml
:open Ocamlbuild_plugin open Command dispatch begin function | After_rules -> ocaml_lib ~extern:true ~dir:"/path/to/mylibrary" "mylibrary" | _ -> ()
在
_tags
:<glob pattern>: use_mylibrary
中的
ocaml_lib
指令myocamlbuild.ml
告诉工具名为“mylibrary”的库(特定实现以.cma
or.cmxa
或其他结尾 - 分析、插件)位于目录“/path/to/mylibrary”中。项目目录中对应的所有文件
glob pattern
都将与“mylibrary”的使用相关联ocamlbuild
,并使用ad hoc参数进行编译(因此您无需担心本机或字节目标)。前任:<src/somefile.ml>: use_mylibrary
注意:如果库位于编译器已知的路径中(通常是/usr/lib/ocaml
或/usr/local/lib/ocaml
),则路径前缀可以安全地替换为+
符号,因此/usr/lib/ocaml/mylibrary
变为+mylibrary
.
于 2013-01-26T21:26:41.190 回答