从Building OCaml code that uses list comprehension帖子中,我可以使用_tags
文件来执行ocamlbuild
较少的构建选项。
$ cat _tags
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension)
从Batteries introduction开始,我还需要使用_tags文件来使用电池包。
<*>: package(batteries)
为什么第一个示例在第二个示例使用<**/*>
时使用<*>
?一般来说,ocamlbuild中_tags文件的目的是什么?你有一些很好的教程吗?
答案 0 :(得分:6)
除了_tags
之外,myocamlbuild.ml
文件构成了ocamlbuild
编译系统的根。
ocamlbuild
是一个非常通用的工具,可以编译任何东西。它由解算器驱动,根据目标,由用户设置,找到可以满足目标的解决方案。解决方案是应用于文件的一系列规则。文件可以用标签标记。标签可以改变规则。例如,它可以添加标志,例如启用分析或链接到库。
_tags
文件提供了一种为文件分配标签的机制,它有一个简单的语法:
pattern ":" tag "," {tag}.
:
左边的内容实际上是一个模式或正则表达式。将为表达式匹配的每个文件分配:
右侧出现的所有标记。
<**/*>
表示此文件夹中的所有文件以及所有子文件夹都有一个快捷方式:true
。 <*>
表示此文件夹中的所有文件(不会降级到子文件夹中)。其他示例包括<*.ml>
,<*.cmx>
或<**/*.cma>
(btw or
也可用于构建模式)。
OCamlbuild记录在OCaml Manual中,还有dump旧维基,有很多信息。
但有趣的是,通常你不需要知道这一点就可以使用OCaml。有一个OASIS
工具可以自动执行所有任务,并通过简单的高级定义为您创建_tags
文件。