2017-03-09 2 views
0

Ich habe ein Projekt, das erfolgreich mit ocamlbuild erstellt. Ich möchte aber auch eine einfache Möglichkeit haben, mit den einzelnen Funktionen des Projekts aus verschiedenen Modulen über den Toplevel zu interagieren, aber meine Versuche, ocamlmktop zu verwenden, haben nicht so funktioniert, wie ich es gerne hätte. Ich habe festgestellt, dass, wenn ich die .cmi-Dateien manuell in das Active Directory legte, bekomme ich einen Fehler "Unbound-Modul". Der Befehl, den ich zur Zeit bin mit zu bauen, ist:Verwenden von ocamlmktop mit ocamlbuild

ocamlfind ocamlmktop -I _build -o my_ocaml -linkpkg -package str module1.cmo module2.cmo 

Gibt es einen besseren, weniger hacky Weg, um die Top-Level-Arbeit in dieser Projektstruktur zu erhalten, ohne cmi Dateien aus dem _build Verzeichnis zu verschieben?

Edit: Ich habe herausgefunden, dass ich es die Typen und Module zu laden bekommen kann, wenn ich die Toplevel als

./my_ocaml -I _build 

Aber das scheint hacky noch laufen. Gibt es eine Möglichkeit, den Suchpfad oder die cmi-Dateien möglicherweise zu erstellen?

Edit 2: Ich denke, die Lösung für mein Problem möglicherweise tatsächlich nicht eine benutzerdefinierte Toplevel überhaupt angesichts dieser Einschränkung über Schnittstellendateien zu kompilieren. Stattdessen habe ich für meine .ocamlinit Load-Anweisungen hinzugefügt, um die Module zu verwenden. Wenn jemand bessere Ideen hat, um das zu lösen, würde ich es sehr schätzen.

Antwort

0

Sie können ein Toplevel bauen, indem die Modulnamen Auflisten Sie in einer my_ocaml.mltop Datei wollen:

Module1 
Module2 
subdir/Module3 

Dann das Ziel Gebäude my_ocaml.top wird ocamlmktop in der erwarteten Weise nennen, und Sie können die resultierende my_ocaml.top Toplevel laufen.

Dies ändert nichts an der Art und Weise, die Sie benötigen _build auf die für die Typprüfung umfassen Pfad hinzuzufügen Lage zu sein, die .cmi Dateien zu finden. Sie können dies tun, wenn Sie den Toplevel aufrufen, indem Sie die Befehlszeilenargumente -I _build übergeben, oder aus dem Toplevel mit #dir "_build";; - der letzte Befehl kann auch in Ihren .ocamlinit eingefügt werden, wenn Sie bevorzugen.