Author: Christian.Queinnec@lip6.fr

## Calcul des dépendances

Le calcul de dépendances d'un ensemble de fichiers d'implantation et d'interface d'une application Objective CAML a un double but. Le premier est d'obtenir une vision globale des interdépendances entre modules. Le deuxième est d'utiliser cette information pour ne recompiler que le strict nécessaire lors de modifications de certains fichiers.
La commande `ocamldep` prend un ensemble de fichiers `.ml` et `.mli` et affiche les dépendances entre fichiers dans le format des fichiers `Makefile`1.
Ces dépendances proviennent de l'utilisation de déclarations globales d'autres modules, soit en utilisant la notation pointée (ex: `M1.f`), soit en ouvrant un module (ex: open `M1`).
Supposons écrits les fichiers `dp.ml` :

    let print_vect v =
        for i = 0 to Array.length v do
          Printf.printf "%f " v.(i)
        done;
        print_newline();;

et `d1.ml` :

    let init n e =
      let v = Array.create 4 3.14 in
        Dp.print_vect v;
        v;;

La commande `ocamldep` à qui l'on passe les noms de ces fichiers indiquera les dépendances suivantes :

    $ ocamldep dp.ml d1.ml array.ml array.mli printf.ml printf.mli
    dp.cmo: array.cmi printf.cmi
    dp.cmx: array.cmx printf.cmx
    d1.cmo: array.cmi dp.cmo
    d1.cmx: array.cmx dp.cmx
    array.cmo: array.cmi
    array.cmx: array.cmi
    printf.cmo: printf.cmi
    printf.cmx: printf.cmi

Les dépendances sont calculées pour les compilateurs code-octet et natif. On lit le résultat de la manière suivante : la production du fichier `dp.cmo` dépend des fichiers `array.cmi` et `printf.cmi`. Les fichiers d'extension `.cmi` dépendent des fichiers de même nom d'extension `.mli`. Il en est de même pour les `.ml` avec les `.cmo` et `.cmx`.
Les fichiers objet de la distribution n'apparaissent pas dans la liste des dépendances. En fait le résultat précédent de `ocamldep` s'il ne trouve pas des fichiers `array.ml` et `printf.ml` dans le catalogue courant, les trouvera dans le chemin des bibliothèques de l'installation et produira :

    $ ocamldep dp.ml d1.ml
    d1.cmo: dp.cmo
    d1.cmx: dp.cmx

Pour indiquer de nouveaux chemins de recherche de fichiers à la commande `ocamldep` on utilisera l'option de commande `-I catalogue` qui ajoute un catalogue aux chemins de recherche.