2010-03-03 6 views
2

Ayant réussi reorganized my project for ocamlbuild with subdirectories et en utilisant ocamlfind, j'ai trouvé difficile de construire le plus haut niveau.ocamlbuild; build toplevel

J'ai construit un fichier .mltop contenant tous les modules qui seraient inclus et ajouté les paquets au _tags, mais la compilation ne fonctionne pas. Il ne peut pas trouver les fonctions C qui sont compilées avec l'un des modules. Avec -classic-display sur, je peux voir ce fichier, libcside.a, n'étant pas inclus et n'est même pas compilé du tout! Le fichier c est ajouté en tant que dépendance à myocamlbuild.ml par,

flag ["link"; "ocaml"; "use_cutil"] (S [A"-cclib"; A"-L."; ]); 
dep ["link"; "ocaml"; "use_cutil"] ["libcside.a"]; 

et _tags,

<utilities.*> : use_cutil 
<**/*.top> : use_str, use_unix, use_cutil, use_curl, use_mysql 

et, enfin, dans libcside.clib,

cutil.o 

Il me manque quelque chose mettre en place la construction pour le niveau supérieur, mais je ne peux pas trouver une ressource fiable en ligne. Merci.

Répondre

3
  • Je suppose que cutil.ml décrit le côté ocaml de libcside.a - correct?
  • Avez-vous mis Cutil dans mltop?
  • Avec votre bibliothèque plug-in cutil OCaml actuelle ne sera pas un lien dans libcside.a (dep seulement instruit ocamlbuild pour le construire, pas de lien)
  • est ici un simple (et travailler) façon de construire la bibliothèque OCaml projet local avec C stubs. Dans myocamlbuild.ml:

    ocaml_lib "linuxnet"; 
    let liblinuxnet_stubs = "liblinuxnet_stubs."^!Options.ext_lib in 
    flag ["link"; "ocaml"; "use_linuxnet"] (S[A"-cclib"; A liblinuxnet_stubs;]); 
    dep ["link"; "ocaml"; "use_linuxnet"] [liblinuxnet_stubs]; 
    

    Dans liblinuxnet_stubs.clib:

    linuxnet_c.o 
    

    Notez que la source de C est appelé linuxnet_c.c de telle sorte que le fichier objet résultant ne remplace pas l'une de linuxnet.ml (ou vice versa). Et enfin _tags:

    true: use_linuxnet 
    

    Avec cette configuration, il sera disponible en premier niveau (notez qu'il n'y a pas besoin de mettre en Linuxnet .mltop la cause linuxnet.cma sera ajouté à relier par use_linuxnet drapeau (généré avec ocaml_lib usage)).

+0

1. Utilitaires: 2. oui. 3. oui, cela l'a fait. Merci. J'avais été ajouté le A "libcside" aux drapeaux, mais cela n'avait pas fonctionné. Il me manquait ocaml_lib. Merci! – nlucaroni