5

我正在使用 camlp4.macro 来启用条件编译。我在通知 OCamlbuild 标记为“use_jscore”的某些文件必须使用给定的 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 的是,所有标记为“use_jscore”的 OCaml 文件都必须由 camlp4.macro 预处理,该文件也提供了 -DUSE_JSCORE 选项。

4

2 回答 2

4

_tags 和命令行方法也应该可以工作,尽管它不会针对单个文件。

_tags的内容:

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

命令行:

ocamlbuild -use-ocamlfind -cflags -ppopt,-DUSE_JSCORE ...
于 2012-04-18T21:31:35.130 回答
3

您在匹配的标志列表中缺少一个标志:

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

实际上,您只想在计算依赖项(启用“ocamldep”标志)和编译(启用“编译”标志)时使用camlp4选项,而不是在使用预处理器时(其中“pp " 标志启用)或链接时(启用“链接”标志时)。

所以现在如果你使用ocamlbuild -use-ocamlfind <target>它应该可以正常工作。

于 2012-04-18T17:06:33.420 回答