编译OCaml时不要链接所有标准库模块

萨克斯健康

我正在为CS类整理一个OCaml简介项目,其中一部分涉及实现列表操作。我希望他们能够使用Pervasives,但不能使用List或任何其他标准库模块。有没有办法设置ocamlbuild,使其仅与标准库中的Pervasives链接?

静脉血

我看到两个机会:要么直接从OCaml标准库中删除模块,要么通过重载具有不同(可能为空)签名的模块来隐藏它们。

第一个变体需要编辑OCaml分发Makefile。实际上,使用opam并没有那么可怕,因为您可以非常轻松地修补OCaml,并将每个修补的OCaml作为单独的编译器分发。从STDLIB删除模块存档,您将需要编辑stdlib/Makefile.sharedstdlib/StdlibModulesstdlib.mllib删除不必要的模块后,可以执行以下操作:

./configure
make world.opt
make install

另一种选择是(ab)使用的-open命令行参数ocamlc当使用模块名称指定该选项时,该模块将在编译程序中自动打开。例如,您可以在具有以下接口(minimal.mli的标准库上编写自己的叠加层

module List = sig end (* or whatever you want to expose *)

然后您可以使用ocamlc -open minimal ...进行编译ocamlbuild:(ocamlbuild -cflags -open,minimal ...您还可以使用_tagsfile传递打开标志,或编写ocamlbuild插件)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章