同様のことをするために何かをハックする必要があったので、ここに回答として投稿すると役立つかもしれません(少なくともOCamlbuildがそれを特徴とするまで)。だから、ここに私の関連部分がありますmyocamlbuild.ml
:
open Ocamlbuild_plugin;;
dispatch begin function
| After_rules ->
(* Using both .ml and .mli files to build documentation: *)
rule "ocaml: ml & mli -> odoc"
~insert:`top
~tags:["ocaml"; "doc"; "doc_use_interf_n_implem"]
~prod:"%.odoc"
(* "%.cmo" so that cmis of ml dependencies are already built: *)
~deps:["%.ml"; "%.mli"; "%.cmo"]
begin fun env build ->
let mli = env "%.mli" and ml = env "%.ml" and odoc = env "%.odoc" in
let tags =
(Tags.union (tags_of_pathname mli) (tags_of_pathname ml))
++"doc_use_interf_n_implem"++"ocaml"++"doc" in
let include_dirs = Pathname.include_dirs_of (Pathname.dirname ml) in
let include_flags =
List.fold_right (fun p acc -> A"-I" :: A p :: acc) include_dirs [] in
Cmd (S [!Options.ocamldoc; A"-dump"; Px odoc;
T (tags++"doc"++"pp"); S (include_flags);
A"-intf"; P mli; A"-impl"; P ml])
end;
(* Specifying merge options with tags: *)
pflag ["ocaml"; "doc"; "doc_use_interf_n_implem"] "merge"
(fun s -> S[A"-m"; A s]);
end
次に、実装とインターフェイスの両方からドキュメントを生成する必要のあるタグやファイルdoc_use_interf_n_implem
を追加すると、うまくいくはずです。.ml
.mli
merge(A)
上記のコードでは、たとえば(すべてをマージするために)のようなタグを追加することによって、マージオプションを追加することもできます。
これは、複雑なプロジェクトで問題が発生する可能性のあるハックであることに注意してください。camlp[45]
特に、処理されたファイルや、4.00.1以外のバージョンのOCamlbuildではテストしていません。