将构建工具添加到ocamlbuild项目(Ragel)
我希望能够在的上下文中将源文件编译成Ocaml源文件。具体来说,对于扩展名为“.rl”的源文件,我希望它执行:将构建工具添加到ocamlbuild项目(Ragel),ocaml,ocamlbuild,Ocaml,Ocamlbuild,我希望能够在的上下文中将源文件编译成Ocaml源文件。具体来说,对于扩展名为“.rl”的源文件,我希望它执行: ragel -O source.rl 构建系统当然应该像往常一样编译生成的Ocaml文件。做这件事的简单方法是什么 以下是_标记文件: <{lexer,parser}.ml>: use_camlp4, pp(camlp4of) <*.{byte,native}>: g++, use_llvm, use_llvm_analysis <*.{byte,nat
ragel -O source.rl
构建系统当然应该像往常一样编译生成的Ocaml文件。做这件事的简单方法是什么
以下是_标记文件:
<{lexer,parser}.ml>: use_camlp4, pp(camlp4of)
<*.{byte,native}>: g++, use_llvm, use_llvm_analysis
<*.{byte,native}>: use_llvm_executionengine, use_llvm_target
<*.{byte,native}>: use_llvm_scalar_opts, use_bindings
如果没有整个源代码目录,很难确定,但是您必须创建一个规则来调用
ragel
编译器。dep
告诉ocamlbuild将这些文件复制到_build目录——根据您的需要,标记可能会有所不同。大概
let ragel_files = ["file1.rl"; ... ]
let () = dispatch begin function
| After_rules ->
rule "Build RL files with Ragel"
~prod:"%.ml"
~dep:"%.rl"
begin fun env _build ->
let rl = env "%.rl" in
Cmd(S[A"ragel"; A"-0"; A rl;])
end;
dep ["compile"; "ocaml"] ragel_files;
end
请查看有关的
ocamlbuild
源代码。这应该是一个很好的开始。我建议按宿主语言区分.rl
文件,即.ml.rl
用于OCaml代码,用于c代码,等等
rule ("ragel: .ml.rl -> .ml") ~dep:"%.ml.rl" ~prod:"%.ml" begin fun env _ ->
let dep = env "%.ml.rl" and prod = env "%.ml" in
Cmd (S[ P"ragel";
T(tags_of_pathname prod ++ "ragel");
A "-O";
A "-F1";
A dep;
A"-o"; A prod;
])
end;;
在调用dispatch
之前,可以在顶层定义规则
此外,您很可能希望关闭ragel生成代码的警告32和38。在\u标签中
:
"generated.ml": warn(-32-38)
这将放在build.ml的底部,对吗?还有什么我需要做的吗?它似乎完全忽视了这一点。我所有的源文件都在同一个顶级目录中。调用\u rules
后,当调用时,它会进入传递到dispatch
的函数中。不一定。如果prod和dep参数满足依赖关系,那么您不应该这样做。如果你遇到麻烦,你能更具体一点吗?(您希望运行的命令及其产生的内容)。哦,要将文件“移动”到“_build”目录中,您需要所有文件的dep,是的。
"generated.ml": warn(-32-38)