2017-01-24 3 views
1

Mon programme OCaml utilise certaines fonctions de la bibliothèque standard OCaml qui ont seulement été introduites dans la version 4.01.0. Comment puis-je arranger cela quand mon utilisateur compile mon code, le compilateur émet une erreur si la version du compilateur OCaml n'est pas 4.01.0 ou supérieur? Je pense que cette erreur serait plus utile qu'une simple erreur générique "variable non liée".Exiger une version OCaml spécifique dans le fichier makefile

Je vois que ocaml -vnum émet "4.01.0" donc je suppose que je pourrais essayer de vérifier cela dans mon Makefile, mais peut-être y at-il une bonne façon de le faire déjà? J'utilise OCamlBuild, si cela aide.

Mon Makefile actuelle ressemble à ceci, par la manière:

all: 
    @ echo "Attention: requires OCaml version >= 4.01.0." 
    ocamlbuild -cflag -annot -lib str -lib unix name_of_my_project.native 
    mv name_of_my_project.native name_of_my_project 

clean: 
    ocamlbuild -clean 
    rm -f name_of_my_project 

Répondre

1

Il y a toujours plus d'une bonne façon :) Mon bonne façon serait d'utiliser oasis. D'autres utiliseraient probablement Autotool AC_PROG_OCAML avec la version spécifiée. Il existe d'autres systèmes de construction, qui ont probablement leurs propres méthodes. Lorsque vous libérerez votre paquet à opam (it is also very easy), vous ajouterez les contraintes au fichier opam, de sorte que le gestionnaire de paquets ne tentera même pas de le compiler. Donc, pour résumer mon conseil personnel est d'utiliser oasis. C'est très simple, mais tout de même assez polyvalent. Dans votre cas, le fichier de contrôle _oasis devrait ressemble à quelque chose comme ceci:

OASISFormat: 0.4 
Name:  name 
Version:  0.0.1 
OCamlVersion: >= 4.01.0 
Synopsis: Cool package 
Authors:  Myself 
Maintainers: Myself 
License:  MIT 
Copyrights: (C) Myself 
Plugins:  META (0.4), DevFiles (0.4) 
BuildTools: ocamlbuild 


Executable "project" 
    Path:   src 
    MainIs:   project.ml 
    CompiledObject: best 
    BuildDepends: str, unix 

Une fois que le fichier est créé, vous pouvez créer un script de configuration avec

oasis setup 

Et après il est prêt (il créer le fichier setup.ml), vous pouvez utiliser la commune:

./configure 
    make 
    make install 
1

Si vous avez déjà un Makefile, l'insertion d'un chèque il y aurait probablement le plus pragma tic moyen d'y parvenir. Peut être fait en utilisant soit des expressions Makefile ou shell. Voici une version shell d'un contrôle similaire: https://github.com/alavrik/piqi/blob/master/configure#L144

Relativement apparenté, je cherchais une compilation conditionnelle pour OCaml et j'ai fini par utiliser optcomp. Voici un example.