Build 使用Poly/ML构建具有嵌套目录结构的项目

Build 使用Poly/ML构建具有嵌套目录结构的项目,build,build-automation,sml,polyml,Build,Build Automation,Sml,Polyml,到目前为止,我一直在为几个小项目使用Poly/ML,其中所有源代码文件都位于同一目录中。要构建这些项目,我只需在REPL中运行以下命令: > PolyML.make "Main"; 但是现在我有一个项目,它的规模使得把所有源代码文件放在同一个目录中是不切实际的。要在REPL中构建这些项目,我需要运行以下命令: > PolyML.make "foo/Foo"; > PolyML.make "bar/Bar"; > PolyML.make "qux/Qux"; > P

到目前为止,我一直在为几个小项目使用Poly/ML,其中所有源代码文件都位于同一目录中。要构建这些项目,我只需在REPL中运行以下命令:

> PolyML.make "Main";
但是现在我有一个项目,它的规模使得把所有源代码文件放在同一个目录中是不切实际的。要在REPL中构建这些项目,我需要运行以下命令:

> PolyML.make "foo/Foo";
> PolyML.make "bar/Bar";
> PolyML.make "qux/Qux";
> PolyML.make "Main";
随着子系统数量的增加,这并不十分实用

有没有办法自动化在Poly/ML中使用嵌套目录结构构建项目的过程



我已经看过SML/NJ的编译管理器和MLton的ML Basis系统。毫无疑问,它们功能强大,但对于我的需要来说太复杂了。

您可以有一个
build.sml
文件列表,并
使用
-ing所有项目文件:

use "bar/bar.sml";
use "foo/foo.sml";
use "main.sml";
或者更简洁一点:

app use [
  "foo/foo.sml",
  "bar/bar.sml",
  "main.sml"
]
其中
app
是标准的
列表。app

然后,您可以只构建一个文件:

$ polyc -o main main.sml
$ # or
$ poly
> PolyML.make "build.sml"

您可以有一个
build.sml
文件列表,并
使用
-ing所有项目文件:

use "bar/bar.sml";
use "foo/foo.sml";
use "main.sml";
或者更简洁一点:

app use [
  "foo/foo.sml",
  "bar/bar.sml",
  "main.sml"
]
其中
app
是标准的
列表。app

然后,您可以只构建一个文件:

$ polyc -o main main.sml
$ # or
$ poly
> PolyML.make "build.sml"

在每个子目录中放置一个名为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);
文件“Foo/FooFunctor.ML”、“Foo/FooA.ML”和“Foo/FooB.ML”分别包含“FooFunctor”、“FooA”和“FooB”的源代码


您可以在作为Poly/ML源代码发行版一部分的Poly/ML编译器的代码中找到这方面的示例。

在每个子目录中放置一个名为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);
文件“Foo/FooFunctor.ML”、“Foo/FooA.ML”和“Foo/FooB.ML”分别包含“FooFunctor”、“FooA”和“FooB”的源代码


您可以在作为Poly/ML源代码发行版的一部分提供的Poly/ML编译器的代码中找到这方面的示例。

我几乎可以肯定,在某个时候,Poly/ML网站上有这方面的信息,但我几天前查找时找不到它。它被删除了吗?当我清除一些过时的文档时,它被删除了。现在它被恢复为。页面现在位于。我几乎可以肯定,在某个时间点,这些信息在Poly/ML网站上,但几天前我在查找时找不到它。它被删除了吗?当我清除一些过时的文档时,它被删除了。它现在被还原为。该页面现在位于