2012-04-18 5 views
5

私はcamlp4.macroを使用して条件付きコンパイルを有効にしています。私は という問題を抱えてOCamlbuildに、 "use_jscore"とタグ付けされた特定のファイル を与えられたcamlp4オプションで前処理しなければならないことを通知しています。ここに私が現在持っているものは次のとおりです:OCamlbuildとcamlp4オプション

let _ = dispatch begin function 
    | After_rules -> 
    flag ["ocaml"; "use_jscore"] (S[A"-package"; A"camlp4.macro"; A"-syntax"; A"camlp4o"; A"-ppopt"; A"-DUSE_JSCORE"]); 

しかし、これはOCamlbuildですべてエスケープされます。私はocamlfindを使用していますので、 OCamlbuildは、 でタグ付けされたすべてのOCamlファイル "use_jscore"を -DUSE_JSCOREオプションを指定したcamlp4.macroで事前処理する必要があるということです。

答えて

3

あなたはあなたと一致しているフラグのリストにフラグが欠落している:確かに

let options = S[...] in 
flag ["ocaml"; "compile"; "use_jscore"] options; 
flag ["ocaml"; "ocamldep"; "use_jscore"] options 

、あなたは「ocamldep」フラグが有効になっている依存関係を(計算する場合にのみ、あなたのCamlp4のオプションを使用したいですプリプロセッサ( "pp"フラグが有効な場合)またはリンク時( "リンク"フラグが有効な場合)にはコンパイルできません(コンパイルフラグが有効な場合)。

ocamlbuild -use-ocamlfind <target>を使用すると正しく動作するはずです。

+0

しかし、私はまったく同じ文が、S /コンパイル/ DEP /とを繰り返す必要はないのだろうか?繰り返しを避ける方法はありますか? –

+0

あなたは正しいです、あなたは 'dep'のためにステートメントを繰り返さなければならないかもしれません。 'S(...)'の内容は、繰り返したくない場合はローカル変数に格納することができます。 – Thomas

4

_タグとコマンドラインのアプローチも同様に機能するはずですが、個々のファイルを対象としません。 _tagsの

内容:

<*.*>: syntax(camlp4o), package(camlp4.macro) 

コマンドライン:

ocamlbuild -use-ocamlfind -cflags -ppopt,-DUSE_JSCORE ... 
関連する問題