使用 ocamlbuild 时生成 dump/explain 个 Menhir 文件
Generate dump/explain files of Menhir when using ocamlbuild
我发现 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...
有什么建议吗?
我自己回答
当然,为此有一个内置的 ocamlbuild 选项。只需将 explain
放入 _tags
中,如下所示。
true: use_menhir, explain
您可以使用 ocamlbuild -documentation
查找内置选项。
我发现 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...
有什么建议吗?
我自己回答
当然,为此有一个内置的 ocamlbuild 选项。只需将 explain
放入 _tags
中,如下所示。
true: use_menhir, explain
您可以使用 ocamlbuild -documentation
查找内置选项。