1

通常の Makefile の使用を避けるために、私が取り組んでいるプロジェクトを ocamlbuild でコンパイルしようとしていますが、これは少し複雑です。

具体的には、最初にコンパイルする必要がある構文拡張ファイル (extend.ml) があります。通常の Makefile には次のルールがあります。

extend.cmo: extend.ml
    $(OCAMLC) -pp "camlp5o pa_extend.cmo q_MLast.cmo" -I +camlp5 -c $<

次に、依存関係を計算するために、次のようなルールがあります。

depend: $(MLFILES) extend.cmo
    $(OCAMLDEP) -pp "camlp5o ./extend.cmo"

もちろん、オブジェクト ファイルの作成には、上記と同様のルールが必要です。


私の質問は、これらのルール/要件を1 つの ocamlbuild コマンドに統合するにはどうすればよいですか (可能な場合) ?

最初にextend.mlファイルをコンパイルしてから、次のコマンドを使用しようとしました:

ocamlbuild -pp "camlp5o ./extend.cmo" -I +camlp5 -use-menhir -no-hygiene Main.byte

しかし、私はそれが決して最適だとは思いません。

残念ながら、私は ocamlbuild をコンパイル ツールとして使用することに慣れていないので、助けていただければ幸いです。

4

1 に答える 1

1

期待されるオプションを指定する 2 つの新しいタグ と を定義できcompile_extendます。use_extendmyocamlbuild.ml ファイルで:

open Ocamlbuild_plugin

let my_flags () =
  flag ["ocaml"; "pp"; "compile_extend"]
    (S [A"camlp5o"; A "pa_extend.cmo"; A "q_MLast.cmo"]);
  flag ["ocaml"; "pp"; "use_extend"]
    (S [A"camlp5o"; A "extend.cmo"]);
  (* files with the use_extend flag must depend on extend.cmo *)      
  dep  ["ocaml"; "use_extend"] ["extend.cmo"];
   ()

let () =
  dispatch (function
    | After_rules ->
      my_flags (); 
    | _ -> ())

次に、タグファイルを次のようにします。

"extend.cmo": compile_extend
<Main.*>: use_extend

とはいえ、これはすべて予想にすぎません。私はこの設定をテストしていません。extend.mlサンプルファイルを含む tarball を提供してMain.ml、状況を再現できるようにしていただけますか?

于 2015-10-30T18:39:04.237 に答える