使用ocamlbuild时生成Menhir的dump/explain文件

7
我发现Menhir提供了--dump和--explain选项,这对调试非常有帮助。但是我该如何在ocamlbuild下启用这些选项,以便Menhir始终在编译时生成转储文件?
我尝试编写myocamlbuild文件来处理自定义标签menhir_dump,如下所示:
... snip ...
(* OASIS_STOP *)

Ocamlbuild_plugin.dispatch (
  MyOCamlbuildBase.dispatch_combine [
    (function
      | After_rules ->
          flag ["menhir_dump"] (S [A "--dump"; A "--explain"])

      | _ -> ()
    );
    dispatch_default
  ]
)

但是当编译时,选项会被插入到子命令中,在ocamlc阶段编译失败。

menhir --dump --explain --raw-depend --ocamldep 'ocamlfind ocamldep -modules' src/parser.mly > src/parser.mly.depends
menhir --ocamlc 'ocamlfind ocamlc -g -annot -bin-annot --dump --explain -I src -package cmdliner -package menhirLib -I src' --dump --explain --infer src/parser.mly
+ menhir --ocamlc 'ocamlfind ocamlc -g -annot -bin-annot --dump --explain -I src -package cmdliner -package menhirLib -I src' --dump --explain --infer src/parser.mly
                                                         ^^^^^^^^^^^^^^^^
ocamlc: unknown option '--dump'.
...snip...

有什么建议吗?
1个回答

3

我自己来回答。

当然,ocamlbuild有一个内置选项可以做到这一点。只需在_tags中添加explain,如下所示。

true: use_menhir, explain

您可以使用ocamlbuild -documentation查找内置选项。

1
有时候我会想,ocamlbuild文档如此贫乏,但细节却如此丰富。而且,社区的myocamlbuild模块为什么没有成为一件事...这可能是放置这种文档的最佳位置。 - Thomas Wickham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接