首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ocamlbuild和camlp5编译

用ocamlbuild和camlp5编译
EN

Stack Overflow用户
提问于 2015-08-26 00:53:36
回答 1查看 200关注 0票数 1

我正在尝试用ocamlbuild编写一个项目,以避免使用常规的Makefile,因为我发现它稍微复杂一些。

具体来说,我有一个语法扩展文件(extend.ml),需要首先编译它。在常规Makefile中有一条规则:

代码语言:javascript
复制
extend.cmo: extend.ml
    $(OCAMLC) -pp "camlp5o pa_extend.cmo q_MLast.cmo" -I +camlp5 -c $<

然后,在计算依赖项时,会有这样的规则:

代码语言:javascript
复制
depend: $(MLFILES) extend.cmo
    $(OCAMLDEP) -pp "camlp5o ./extend.cmo"

当然,创建任何对象文件都需要与上面的规则类似。

我的问题是,如何将这些规则/要求集成到one ocamlbuild命令(如果可能的话)?

我已经尝试先编译extend.ml文件,然后使用以下命令:

代码语言:javascript
复制
ocamlbuild -pp "camlp5o ./extend.cmo" -I +camlp5 -use-menhir -no-hygiene Main.byte

但我不认为这在任何方面都是最理想的。

不幸的是,我不熟悉使用ocamlbuild作为编译工具,所以任何帮助都将是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 18:39:04

您可以定义两个新标记,compile_extenduse_extend,它们指定了预期的选项。在您的myocamlbuild.ml文件中:

代码语言:javascript
复制
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 (); 
    | _ -> ())

然后,您将使用以下标记文件:

代码语言:javascript
复制
"extend.cmo": compile_extend
<Main.*>: use_extend

尽管如此,这都是浮想联翩的猜测,我还没有测试这个设置。您能提供一个tarball示例extend.ml文件和允许再现您的情况的Main.ml吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32216347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档