8

生成したドキュメントにソースコードを含めたい。ocamldocこれは、次のようにコマンドラインで呼び出すと機能しますocamldoc -I _build -html -keep-code -colorize-code *.{ml,mli} -d .docdir。ただし、これをと統合するのに問題がありocamlbuildます。

私は次のコードを使用していますmyocamlbuild.ml

open Ocamlbuild_plugin;;

dispatch begin function
  | After_options ->
      Options.ocamldoc := S[A"ocamldoc"; A"-keep-code"; A"-colorize-code"]
  | _ -> ()
end

ただし、これには、対応するインターフェイスファイルがないファイルのソースのみが含まれます。ここで説明されていることとは異なり、ファイルが存在する場合にファイルocamlbuildを渡すことを拒否しているように見えます。ocamlbuildを私がやりたいことをするように誘導する方法はありますか?.mlocamldoc.mli

4

2 に答える 2

4

同様のことをするために何かをハックする必要があったので、ここに回答として投稿すると役立つかもしれません(少なくとも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ではテストしていません。

于 2013-11-07T13:13:41.147 に答える
3

現在、OCamlbuildではサポートされていないようです。バグトラッカーでこれに関する機能リクエストを送信していただけますか?

于 2012-12-12T15:21:40.743 に答える