Build 使用Poly/ML构建具有嵌套目录结构的项目
到目前为止,我一直在为几个小项目使用Poly/ML,其中所有源代码文件都位于同一目录中。要构建这些项目,我只需在REPL中运行以下命令: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
> 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网站上,但几天前我在查找时找不到它。它被删除了吗?当我清除一些过时的文档时,它被删除了。它现在被还原为。该页面现在位于