2015-03-28 1 views
1

Jusqu'à présent, j'ai utilisé Poly/ML pour plusieurs petits projets où tous les fichiers de code source se trouvent tous dans le même répertoire. Pour construire ces projets, tout ce que je devais faire était exécutez la commande suivante dans le REPL:Utilisation de Poly/ML pour créer des projets avec des structures de répertoires imbriquées

> PolyML.make "Main"; 

Mais maintenant j'ai un projet dont l'ampleur, il est impossible de mettre tous les fichiers de code source dans le même répertoire. Pour construire ces projets dans le REPL, je dois exécuter les commandes suivantes:

> PolyML.make "foo/Foo"; 
> PolyML.make "bar/Bar"; 
> PolyML.make "qux/Qux"; 
> PolyML.make "Main"; 

qui est pas très pratique que le nombre de sous-systèmes augmente.

Est-il possible d'automatiser le processus de construction de projets avec des structures de répertoires imbriquées dans Poly/ML?


P.D .: J'ai eu un coup d'œil à la fois Compilation SML/NJ Manager et le système de base de ML de MLton. Bien que incontestablement puissant, ceux-ci sont trop compliqués pour mes besoins.

Répondre

4

Mettez un fichier appelé ml_bind.ML dans chacune des sous-répertoires et ont ces fichiers construire le composant pour ce répertoire. PolyML.make s'attend à ce que le nom du fichier source corresponde au nom du composant (structure, signature ou foncteur). Donc, si elle cherche une structure appelée "Foo", elle attendra la source de "Foo" dans un fichier appelé "Foo", "Foo.ML" ou "Foo.sml". Si à la place il trouve un répertoire appelé "Foo" il entre récursivement dans le répertoire "Foo" et utilise le fichier "ml_bind.ML" comme guide pour construire la structure "Foo". En règle générale, "Foo/ml_bind.ML" ressemblera

structure Foo = FooFunctor(structure A = FooA and B = FooB); 

avec des fichiers "Foo/FooFunctor.ML", "Foo/FooA.ML" et "Foo/FooB.ML" contenant la source « FooFunctor "," FooA "et" FooB "respectivement.

Vous pouvez trouver des exemples dans le code du compilateur Poly/ML qui fait partie de la distribution de code source Poly/ML.

+0

Je suis presque sûr que, à un moment donné, cette information était dans le site Web Poly/ML, mais je ne pouvais pas le trouver quand je l'ai cherché il y a quelques jours. A-t-il été retiré? – pyon

+0

Il a été supprimé lorsque j'ai supprimé une documentation obsolète. Il a maintenant été restauré en tant que http://www.polyml.org/docs/PolyMLMake.html. –

+1

Et la page est maintenant située à http://www.polyml.org/documentation/Reference/PolyMLMake.html – eatonphil

1

Vous pourriez avoir un fichier build.sml liste et use -ment tous les fichiers du projet:

use "bar/bar.sml"; 
use "foo/foo.sml"; 
use "main.sml"; 

Ou, un peu plus concis:

app use [ 
    "foo/foo.sml", 
    "bar/bar.sml", 
    "main.sml" 
] 

app est le List.app standard.

Ensuite, vous pouvez construire ce seul fichier:

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