以同样的方式使用:
ocamlc -i foo.ml
Run Code Online (Sandbox Code Playgroud)
为foo.ml生成默认签名是否有办法从编译文件(*.cmo)或档案(*.cma)生成签名?
我的用例是我有一个我希望链接的存档abcd.cma,包含许多模块(比如模块a,b,c和d),我不想打扰多个*.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生成工具.
如果你必须编译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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |