2 Stimmen

ocamlbuild; Aufbau der obersten Ebene

Nach erfolgreicher mein Projekt für ocamlbuild mit Unterverzeichnissen umorganisiert und mit ocamlfind habe ich Schwierigkeiten, die oberste Ebene zu erstellen.

Ich habe eine .mltop Datei, die alle einzubeziehenden Module enthält, und fügte die Pakete zu der _tags aber der Build funktioniert nicht. Er kann die C-Funktionen, die mit einem der Module kompiliert wurden, nicht finden. Mit -classic-display ein, kann ich die Datei sehen, libcside.a nicht enthalten und wird auch gar nicht kompiliert! Die c-Datei wird als Abhängigkeit in myocamlbuild.ml von,

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

und in _tags ,

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

und, schließlich, in libcside.clib ,

cutil.o

Ich vermisse etwas bei der Einrichtung des Aufbaus für die oberste Ebene, aber ich kann keine zuverlässige Quelle im Internet finden. Danke!

3voto

ygrek Punkte 6606
  • Ich nehme an, dass cutil.ml die ocaml-Seite von libcside.a beschreibt - richtig?
  • Haben Sie Cutil in mltop eingesetzt?
  • Mit dem aktuellen Plugin cutil wird die ocaml-Bibliothek nicht mit libcside.a in ( dep weist ocamlbuild nur an, es zu bauen, nicht zu verlinken)
  • Hier ist ein einfacher (und funktionierender) Weg, eine projektlokale ocaml-Bibliothek mit C-Stubs zu erstellen. In 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];

    In liblinuxnet_stubs.clib:

    linuxnet_c.o

    Beachten Sie, dass der C-Quelltext den Namen linuxnet_c.c damit die resultierende Objektdatei nicht diejenige aus linuxnet.ml überschreibt (oder umgekehrt). Und schließlich in _tags:

    true: use_linuxnet

    Mit dieser Einstellung wird es in der Toplevel-Ebene verfügbar sein (beachten Sie, dass es nicht notwendig ist, die Linuxnet in .mltop, weil linuxnet.cma dem Link hinzugefügt wird durch use_linuxnet Flagge (erzeugt mit ocaml_lib Verwendung)).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X