我正在尝试用ocamlbuild编写一个项目,以避免使用常规的Makefile,因为我发现它稍微复杂一些。
具体来说,我有一个语法扩展文件(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"当然,创建任何对象文件都需要与上面的规则类似。
我的问题是,如何将这些规则/要求集成到one ocamlbuild命令(如果可能的话)?
我已经尝试先编译extend.ml文件,然后使用以下命令:
ocamlbuild -pp "camlp5o ./extend.cmo" -I +camlp5 -use-menhir -no-hygiene Main.byte但我不认为这在任何方面都是最理想的。
不幸的是,我不熟悉使用ocamlbuild作为编译工具,所以任何帮助都将是非常感谢的。
发布于 2015-10-30 18:39:04
您可以定义两个新标记,compile_extend和use_extend,它们指定了预期的选项。在您的myocamlbuild.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尽管如此,这都是浮想联翩的猜测,我还没有测试这个设置。您能提供一个tarball示例extend.ml文件和允许再现您的情况的Main.ml吗?
https://stackoverflow.com/questions/32216347
复制相似问题