OCaml _tags 文件的用途是什么,以及如何解释内容?

What's the purpose of _tags file with OCaml, and how to interpret the contents?

post 开始,我可以使用 _tags 文件执行 ocamlbuild,构建选项更少。

$ cat _tags
<**/*> : package(camlp4),syntax(camlp4o),package(pa_comprehension)

Batteries introduction 开始,我还需要 _tags 文件才能使用 Batteries 包。

<*>: package(batteries)

为什么第一个示例使用 <**/*> 而第二个示例使用 <*>?一般来说,ocamlbuild 中 _tags 文件的用途是什么?你有一些好的教程吗?

除了myocamlbuild.ml之外还有一个_tags文件构成了ocamlbuild编译系统的根目录。

ocamlbuild 是一个非常通用的工具,可以编译任何东西。它由求解器驱动,根据用户设定的目标,找到满足目标的解。解决方案是应用于文件的一系列规则。文件可以用标签来标记。标签可以改变规则。例如,它可以添加标志,例如启用分析或链接到库。

一个_tags文件提供了一种为文件分配标签的机制,它有一个简单的语法:

 pattern ":" tag "," {tag}.

:左边的其实是一个模式或者正则表达式。每个与表达式匹配的文件都将分配有出现在 : 右侧的所有标签。

<**/*> 表示对于此文件夹中的所有文件,以及所有子文件夹,有一个快捷方式:true<*> 表示此文件夹中的所有文件(不进入子文件夹)。其他示例是 <*.ml><*.cmx><**/*.cma>(顺便说一下,or 也可用于构建模式)。

OCamlbuild 记录在旧 wiki 的 OCaml Manual, also there is a dump 中,包含大量信息。

但有趣的是,通常您不需要知道这些就可以使用 OCaml。有一个 OASIS 工具可以自动执行所有任务,并根据简单的高级定义为您创建 _tags 文件。