到目前为止,我一直在几个小项目中使用Poly,其中所有的源代码文件都在同一个目录中。要构建这些项目,我所要做的就是在REPL中运行以下命令:
> PolyML.make "Main";但是现在我有了一个项目,它的规模使得将所有源代码文件放在同一个目录中是不切实际的。要在REPL中构建这些项目,我需要运行以下命令:
> PolyML.make "foo/Foo";
> PolyML.make "bar/Bar";
> PolyML.make "qux/Qux";
> PolyML.make "Main";这并不是很实际,因为子系统的数量增加。
有什么方法可以使在Poly中使用嵌套目录结构构建项目的过程自动化吗?
P.D.:我看过SML/NJ的编译管理器和MLton的ML基础系统。虽然它们无疑是强大的,但对于我的需要来说,它们太复杂了。
发布于 2015-03-29 16:37:24
在每个子目录中放置一个名为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编译器的代码中找到这方面的示例,该编译器是Poly/ML源代码分发的一部分。
发布于 2015-03-28 14:21:58
您可以有一个build.sml文件列表和use-ing all项目文件:
use "bar/bar.sml";
use "foo/foo.sml";
use "main.sml";或者,更简洁一点:
app use [
"foo/foo.sml",
"bar/bar.sml",
"main.sml"
]其中app是标准的List.app。
然后,您可以只构建这一个文件:
$ polyc -o main main.sml
$ # or
$ poly
> PolyML.make "build.sml"https://stackoverflow.com/questions/29315827
复制相似问题