Je travaille actuellement sur un projet de site Web écrit dans OCAML et compilé à JavaScript à l'aide de JS_OF_OCAML. Il fonctionne assez bien que je n'ai qu'un seul fichier source à l'aide de la commande Les autres modules sont en réalité un lexer et un analyseur poché par Ocamllex et Menhir. J'ai lu un Tutoriel sur Comment utiliser OCAMLLEX et MENHIR avec JS_OF_OCAML, mais il fait des hypothèses erronées sur les endroits où JS_OF_OCAML est installé (je l'ai installé avec OPAM) et utilise OCAMLBUILD et je souhaite savoir comment le faire à la main sans utiliser d'outil automatisé tel que OCAMLBUILD. P> ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -o fichier.byte fichier.ml code> mais je voudrais inclure plusieurs modules de mon projet. Comment puis-je faire ça? P>
3 Réponses :
(concernant ocamlbuild code> garde un journal des opérations qu'il effectue. Après un appel OCAMLBUILD, consultez
_build / _log code> et vous verrez toutes les commandes qu'elle a invoquées, avec des arguments complets, etc. C'est probablement le moyen le plus simple pour vous de comprendre comment le faire à la main. p>
+ site-lib code> hypothèses et opam, c'est quelque chose que vous devez signaler aux auteurs du didacticiel, ils voudront s'assurer que cela fonctionne également pour les utilisateurs de l'OPAM.) p>
J'ai trouvé la solution en essayant de comprendre les maquillages pour les exemples officiels.
Voici mon maquillage: P>
OBJS=file1.cmo file2.cmo file3.cmo NAME=projectname OCAMLC=ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o $(NAME).byte: $(OBJS) $(OCAMLC) -linkpkg -o $@ $(OBJS) $(NAME).js: $(NAME).byte js_of_ocaml $< %.cmo: %.ml $(OCAMLC) -c $< ...
Il a pris un tas d'expérimentations, mais j'ai finalement compris comment avoir Ocamlbuild passe les mêmes drapeaux à OcamLfind que l'utilisation d'Ocsigen dans ces maquillages. J'utilise également JS_OF_OCAML installé avec OPAM.
Pour mon étui à tester, j'ai créé un très petit exemple avec deux fichiers - Main.ML et Square.ml. P>
Square.ml: P> > main.ml: p> la commande pour la construire avec succès: p> Ceci produit une sortie JS identique à mon cas de test initial où la fonction carrée était dans MAIN.ML. Le journal Ocamlbuild montre exactement ce que j'attends (deux appels à OCAMLDEP, deux à OCAMLC -C, un à OCAMLC -LinkPkg). P> P>