2017-06-13 4 views
1

Ich schreibe ein großes OCaml-Projekt. Ich schrieb eine Datei foo.ml, die perfekt funktioniert. In einem Unterverzeichnis des Verzeichnisses foo.ml befindet sich eine Datei bar.ml.Laden OCaml-Module nicht im aktuellen Verzeichnis

bar.ml Referenzen Code in foo.ml, so seine erste Zeile ist:

open Foo 

Das gibt mir einen Fehler bei der Kompilierung:

Unbound module Foo. 

Was kann ich tun, um dies zu beheben, ohne den Standortwechsel von foo.ml?

+1

Wie kompiliere/lade ich die Datei 'bar.ml'? – Bergi

+0

https://caml.inria.fr/pub/docs/manual-ocaml/comp.html#sec269 – Bergi

Antwort

6

Der einfache Weg ist, eines von OCaml Build-System wie ocamlbuild oder Oase zu verwenden. Eine andere Option wäre jbuilder, aber jbuilder ist sehr über die Organisation der Datei angetan und erlaubt nicht die Art von Unterverzeichnisstruktur, nach der Sie fragen.

Der explizitere Pfad kommt mit einer Warnung: OCaml Build-Prozess ist kompliziert mit vielen beweglichen Teilen, die schwer zu behandeln sein können. Nach dieser üblichen Warnung sucht der OCaml-Compiler bei der Suche nach Modulen zunächst in der aktuellen Compilierumgebung nach dem Modul und sucht dann in den durch die Optionskästchen "-I" (plus.) Angegebenen Verzeichnissen nach kompilierten Interface- ".cmi" -Dateien das aktuelle Verzeichnis und das Standardbibliotheksverzeichnis).

Um also Ihre bar.ml Datei zu kompilieren, müssen Sie das übergeordnete Verzeichnis in der Liste der enthaltenen Verzeichnisse mit der Option -I .. hinzufügen.

Nach alledem werden Sie feststellen, dass während der Verbindungsphase alle Objektdateien (d. H. .cmo oder .cmx) in einer topologischen Reihenfolge aufgelistet werden müssen, die mit dem Abhängigkeitsdiagramm Ihres Projekts kompatibel ist.

Daher, lassen Sie mich meinen Rat wiederholen: Verwenden Sie ein richtiges Build-System.

Verwandte Themen