7
votes

Comment utiliser des modules avec js_of_ocaml?

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 ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -o fichier.byte fichier.ml mais je voudrais inclure plusieurs modules de mon projet. Comment puis-je faire ça?

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.


0 commentaires

3 Réponses :


5
votes

ocamlbuild garde un journal des opérations qu'il effectue. Après un appel OCAMLBUILD, consultez _build / _log 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.

(concernant + site-lib 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.)


0 commentaires

8
votes

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 $<
...


0 commentaires

2
votes

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.

Square.ml: > xxx

main.ml: xxx

la commande pour la construire avec succès: xxx

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).


0 commentaires