与使用相同:
ocamlc -i foo.ml
为 foo.ml生成默认签名有没有办法从编译文件(* .cmo)或档案(* .cma)生成签名?
我的用例是我有一个存档 abcd.cma 我要链接,包含大量模块(比如模块 a , b , c 和 d )我不想打扰多个* .mli和* .cmi我的Makefile需要处理来编译和链接用户端代码(使用库)。例如。说我的文件 uses_a.ml 仅使用 abcd.cma 存档中的 a 模块。我的理解是,要链接到 abcd.cma 模块,我必须通过以下动议:
ocamlc -i a.ml > a.mli
ocamlc -c a.mli
ocamlc -c uses_a.ml
ocamlc abcd.cma uses_a.cmo
如果我无法访问来源或签名,这似乎太复杂或不可能。鉴于我在最后一个命令中向编译器提供了整个存档,我不清楚为什么我必须通过编译(或生成 - 如果我有权访问源)的模式I模块的特定签名文件的仪式我正在使用。该工具可以将最后一个命令解释为使用存档中存在的任何模块的“默认”签名的邀请,该线路上的后续模块使用该签名。顺便说一下,我现在不想使用自动Makefile生成工具。
答案 0 :(得分:5)
如果你必须编译a.ml和a.mli,那么就没有必要拥有一个库。
库通常由本地代码中的abcd.cma
文件(或abcd.a
和abcd.cmxa
)以及导出的模块的接口集(.cmi文件)组成来自图书馆。因此,通常,在您的情况下,文件a.cmi
应与库一起提供。
在这种情况下,你只需要这样做:
ocamlc -I path/to/directory/containing_a.cmi -c uses_a.ml
ocamlc -o program.opt abcd.cma uses_a.cmo