pyo*_*yon 2 build-automation build sml polyml
到目前为止,我一直在几个小项目中使用 Poly/ML,其中所有源代码文件都位于同一目录中。要构建这些项目,我所要做的就是在 REPL 中运行以下命令:
> PolyML.make "Main";
Run Code Online (Sandbox Code Playgroud)
但现在我有一个项目,其规模使得将所有源代码文件放在同一目录中是不切实际的。要在 REPL 中构建这些项目,我需要运行以下命令:
> PolyML.make "foo/Foo";
> PolyML.make "bar/Bar";
> PolyML.make "qux/Qux";
> PolyML.make "Main";
Run Code Online (Sandbox Code Playgroud)
随着子系统数量的增加,这不太实用。
有没有什么方法可以自动化在 Poly/ML 中使用嵌套目录结构构建项目的过程?
PD:我看过 SML/NJ 的 Compilation Manager 和 MLton 的 ML Basis 系统。虽然毫无疑问功能强大,但它们对于我的需求来说太复杂了。
将名为 ml_bind.ML 的文件放入每个子目录中,并让这些文件为该目录构建组件。
PolyML.make 期望源文件的名称与组件的名称(结构、签名或函子)匹配。因此,如果它正在寻找名为“Foo”的结构,它将期望在名为“Foo”、“Foo.ML”或“Foo.sml”的文件中找到“Foo”的源。相反,如果它找到一个名为“Foo”的目录,它将递归地进入“Foo”目录并使用“ml_bind.ML”文件作为构建“Foo”结构的指南。通常,“Foo/ml_bind.ML”看起来像
structure Foo = FooFunctor(structure A = FooA and B = FooB);
Run Code Online (Sandbox Code Playgroud)
文件“Foo/FooFunctor.ML”、“Foo/FooA.ML”和“Foo/FooB.ML”分别包含“FooFunctor”、“FooA”和“FooB”的源。
您可以在 Poly/ML 编译器的代码中找到这方面的示例,该编译器是 Poly/ML 源代码分发的一部分。
| 归档时间: |
|
| 查看次数: |
428 次 |
| 最近记录: |