module Unit_info:sig
..end
此模块集中处理编译文件及其元数据。
也许更重要的是,此模块提供了从字符串或文件名派生模块名称的函数。
typemodname =
string
typefilename =
string
typefile_prefix =
string
val modulize : string -> modname
modulize s
将 s
的首字母大写。
val normalize : string -> string
normalize s
将 s
的首字母小写。
val modname_from_source : filename -> modname
modname_from_source filename
等于 modulize stem
,其中 stem
是文件名 filename
的基本名称,去掉了所有扩展名。例如,modname_from_source "/pa.th/x.ml.pp"
等于 "X"
。
val is_unit_name : modname -> bool
is_unit_name ~strict name
仅当 name
可用作有效的模块名称时才为真。
type
t
编译单元的元数据
ocamlopt dir/x.mli -o target/y.cmi
时,dir/x.mli
Y
target/y
val source_file : t -> filename
source_file u
是 u
的源文件。
val prefix : t -> file_prefix
prefix u
是单元的文件名前缀。
val modname : t -> modname
modname u
或 artifact_modname a
是单元或编译工件的模块名称。
val check_unit_name : t -> unit
check_unit_name u
如果派生的模块名称 modname u
不应按 Unit_info.is_unit_name
~strict:true
指定的那样用作模块名称,则会打印警告。
val make : ?check_modname:bool ->
source_file:filename -> file_prefix -> t
make ~check ~source_file prefix
将 source_file
和模块名称 Unit_info.modname_from_source
target_prefix
都关联到文件系统路径前缀 prefix
。
如果 check_modname=true
,则此函数会在派生的模块名称根据 Unit_info.check_unit_name
无效时发出警告。
module Artifact:sig
..end
构建工件
val cmi : t -> Artifact.t
这些函数从 unit
元数据派生特定的 artifact
元数据。
val cmo : t -> Artifact.t
val cmx : t -> Artifact.t
val obj : t -> Artifact.t
val cmt : t -> Artifact.t
val cmti : t -> Artifact.t
val annot : t -> Artifact.t
val companion_cmi : Artifact.t -> Artifact.t
以下函数通过更新其文件名的扩展名来更改工件的类型。这些函数有意不涵盖所有工件种类,因为我们希望跟踪哪些工件被假定为捆绑在一起。
val companion_obj : Artifact.t -> Artifact.t
val companion_cmt : Artifact.t -> Artifact.t
模块实现的编译在存在 mli 和 cmi 文件的情况下会发生变化,以下函数有助于处理此问题。
val mli_from_source : t -> filename
mli_from_source u
是与单元 u
关联的接口源文件名。实际后缀取决于 Config.interface_suffix
。
val mli_from_artifact : Artifact.t -> filename
mli_from_artifact t
是从工件 t
派生的接口源文件的名称。当处理从未知源文件(例如打包模块)派生的工件时,此变体是必要的。
val is_cmi : Artifact.t -> bool
检查工件是否为 cmi
val find_normalized_cmi : t -> Artifact.t
find_normalized_cmi u
在 load_path 中查找与模块名称 modname u
匹配的文件。
Not_found
如果不存在这样的 cmi