2

与使用相同:

ocamlc -i foo.ml  

要为foo.ml生成默认签名,有没有办法从编译文件 (*.cmo) 或存档 (*.cma) 生成签名?

我的用例是我有一个要链接的存档abcd.cma ,其中包含许多模块(例如模块abcd),我不想打扰多个 *.mli 和 *。 cmi 我的 Makefile 需要处理以编译和链接用户端代码(使用该库)。例如说我有文件uses_a.ml只使用abcd.cma档案中模块。我的理解是,要与abcd.cma模块链接,我必须通过以下动作:

ocamlc -i a.ml > a.mli
ocamlc -c a.mli
ocamlc -c uses_a.ml  
ocamlc abcd.cma uses_a.cmo

如果我无法访问来源或签名,这似乎太复杂或不可能。鉴于我在最后一个命令中向编译器提供了整个存档,我不清楚为什么我必须通过编译(或生成 - 如果我可以访问源)模块的特定签名文件的仪式我我正在使用。最后一个命令可能已被该工具解释为邀请使用存档中存在的任何模块的“默认”签名,该文件中的后续模块使用该行。顺便说一句,我现在不想使用自动 Makefile 生成工具。

4

1 回答 1

5

如果您必须编译 a.ml 和 a.mli,那么拥有库是没有意义的。

库通常由一个abcd.cma文件(或两者都包含abcd.aabcd.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
于 2012-04-10T19:43:29.327 回答