2017-03-09 4 views
0

J'ai un projet qui se construit avec succès en utilisant ocamlbuild. Cependant, je voudrais également un moyen facile d'interagir avec les fonctions individuelles du projet à partir de différents modules via le toplevel, mais mes tentatives d'utiliser ocamlmktop n'ont pas fonctionné comme je le voudrais. J'ai trouvé que si je mets manuellement les fichiers. Cmi dans le répertoire actif, j'obtiens une erreur "Unbound module". La commande J'utilise actuellement de construire est:Utilisation d'ocamlmktop avec ocamlbuild

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

Y at-il une meilleure façon moins bidouillés pour obtenir le premier niveau pour travailler dans cette structure de projet sans déplacer les fichiers cmi hors du répertoire _build?

Edit: J'ai compris que je peux l'obtenir pour charger les types et les modules si je lance le premier niveau comme

./my_ocaml -I _build 

Mais cela semble encore aki. Y at-il un moyen de faire cuire le chemin de recherche ou les fichiers cmi dans peut-être?

Édition 2: Je pense que la solution à mon problème peut en fait être de ne pas compiler un toplevel personnalisé à cause de cette restriction sur les fichiers d'interface. J'ai plutôt ajouté des directives de chargement à mon .ocamlinit pour utiliser les modules. Si quelqu'un a de meilleures idées pour résoudre cela, je l'apprécierais grandement.

Répondre

0

Vous pouvez construire un premier niveau en énumérant les noms de modules que vous voulez dans un fichier my_ocaml.mltop:

Module1 
Module2 
subdir/Module3 

construire ensuite la cible my_ocaml.top appellera ocamlmktop de la manière prévue, et vous pouvez exécuter le résultat my_ocaml.top toplevel.

Ceci ne modifie pas la façon dont vous devez ajouter _build au chemin d'inclusion pour le vérificateur de type afin de pouvoir trouver les fichiers .cmi. Vous pouvez le faire lorsque vous appelez le toplevel en passant les arguments de ligne de commande -I _build, ou à partir du toplevel avec #dir "_build";; - la dernière commande peut également être placée dans votre .ocamlinit si vous préférez.