生成*.cma档案的签名和/或与OCaml档案文件链接的更简单方法

Mar*_*tus 2 ocaml

以同样的方式使用:

ocamlc -i foo.ml  
Run Code Online (Sandbox Code Playgroud)

foo.ml生成默认签名是否有办法从编译文件(*.cmo)或档案(*.cma)生成签名?

我的用例是我有一个我希望链接的存档abcd.cma,包含许多模块(比如模块a,b,cd),我不想打扰多个*.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
Run Code Online (Sandbox Code Playgroud)

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

Fab*_*ant 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
Run Code Online (Sandbox Code Playgroud)