gpt4 book ai didi

ocaml - 忽略 OCaml 与 OCamlbuild 的接口(interface)

转载 作者:行者123 更新时间:2023-12-01 08:24:53 27 4
gpt4 key购买 nike

我有一个大型库,我想创建一个目标来打包所有模块,但忽略源目录中存在的 .mli 文件。是否有一种通过插件或特殊的 _tags 集使用 ocamlbuild 的简单方法可以轻松实现此目的。

我能想到的一个潜在解决方案是插件中新的 OCaml 编译规则,并将它们设置为比内置规则具有更高的优先级。

谢谢。

最佳答案

默认情况下,ocamlbuild 会先尝试使用mli 来编译它的cmi 文件。如果找不到 mli 文件,那么它将使这条规则无效并尝试下一条。 ocamlbuild -documentation 命令将准确显示规则的顺序。如果适用多个规则,则选择第一个。遗憾的是,没有用于更改规则顺序或删除规则(除了删除所有规则)的界面。但是我们可以将我们自己的规则添加到列表的顶部,这将覆盖违规规则。为此,我们需要编写以下 myocamlbuild.ml 插件:

open Ocamlbuild_plugin
module Compiler = Ocamlbuild_pack.Ocaml_compiler

let override () =
rule "ocaml-override: ml -> cmo & cmi"
~insert:`top
~prods:["%.cmo"; "%.cmi"]
~deps:["%.ml"; "%.ml.depends"]
~doc:"This rule disables mli files."
(Compiler.byte_compile_ocaml_implem "%.ml" "%.cmo")

let () = dispatch (function
| After_rules -> override ()
| _ -> ())

关于ocaml - 忽略 OCaml 与 OCamlbuild 的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com