3

.mli大きなライブラリがあり、すべてのモジュールをパックするが、ソース ディレクトリに存在するファイルを無視するターゲットを作成したいと考えています。これを簡単に達成できるocamlbuildプラグインまたは特別なセットを介して使用する簡単な方法はありますか?_tags

私が考えることができる1つの潜在的な解決策はOCaml、プラグインの新しいコンパイルルールであり、ビルドインルールよりも優先されるように設定します。

ありがとうございました。

4

1 に答える 1

2

デフォルトで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 ()
    | _ -> ())
于 2016-02-02T12:38:16.780 に答える