.mli
大きなライブラリがあり、すべてのモジュールをパックするが、ソース ディレクトリに存在するファイルを無視するターゲットを作成したいと考えています。これを簡単に達成できるocamlbuild
プラグインまたは特別なセットを介して使用する簡単な方法はありますか?_tags
私が考えることができる1つの潜在的な解決策はOCaml
、プラグインの新しいコンパイルルールであり、ビルドインルールよりも優先されるように設定します。
ありがとうございました。
.mli
大きなライブラリがあり、すべてのモジュールをパックするが、ソース ディレクトリに存在するファイルを無視するターゲットを作成したいと考えています。これを簡単に達成できるocamlbuild
プラグインまたは特別なセットを介して使用する簡単な方法はありますか?_tags
私が考えることができる1つの潜在的な解決策は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 ()
| _ -> ())