Make

C'est un outil spécialement conçu pour le développement. Consigné dans un fichier (généralement appelé ”Makefile”) sont spécifiés des buts à atteindre en fonction de préconditions. Les préconditions sont en général la date d'écriture de fichiers source par rapport à la date de création du compilé, ou des buts plus complexes. P.ex.


\begin{code}
all: toto
\par
toto.class: toto.java
jikes toto.java
\par
toto: toto.class
\par
\end{code}

Dans l'exemple qui précède (très primitif, et sans grand intérêt) le but par défaut (”all”) dépend de toto, toto dépend de toto.class, toto.class dépend de toto.java. Si make détermine que toto.java est de date plus récente que toto.class, la règle toto.class sera exécutée, et la commande {\(\backslash\)tt jikes toto.java} exécutée.

Un exemple plus pratique de Makefile suit: images/Makefile_simple_java.1.eps0

Nous voyons que nous utilisons un petit scripte qui va reformater la sortie du compilateur java pour être compatible avec ce à quoi s'attend vim comme sortie d'erreur:

images/joinLines.1.eps0 Adjoignons quelques exemples de fichiers make pour perl: images/Makefile_perl.1.eps0

Un plus complet pour java: images/Makefile.java.1.eps0 images/Makefile.java.2.eps0 images/Makefile.java.3.eps0 images/Makefile.java.4.eps0 images/Makefile.java.5.eps0

Et finalement deux Makefile pour \(\backslash\)LaTex images/Makefile.toplevel.latex.1.eps0 images/Makefile.toplevel.latex.2.eps0 images/Makefile.toplevel.latex.3.eps0 images/Makefile.latex.1.eps0 images/Makefile.latex.2.eps0 images/Makefile.latex.3.eps0 images/Makefile.latex.4.eps0

Sans vraiment entrer dans les détails de ce fichier de configuration pour make, le compilateur est déterminé, à ce niveau il y aura des problèmes, car si jikes ne pourra pas ètre trouvé, les opérations faites par la suite ne manqueront pas de rater, il faudrait donc terminer l'exécution de make avec un message d'erreur dans ce cas. Quelques variables sont initialisées, en partie en utilisant des scriptes shell (p.ex. EXTCLASSPATH) ou des fonctions implicites de make (p.ex. MAINS).

Des règles implicites sont déclarées (p. ex. comment arriver en général d'un fichier .java à un fichier .class), puis le but/la règle ”all” est mise sous condition (date de la dernière modification) par rapport à tous les fichiers à terminaison ”.class” dont le fichier source contient ls séquence ”public static void main” (s'ils n'existent pas, ils sont générés grâce à la règle implicite). Une fois que tous les fichiers nécessaires sont à jour la classe ”Main” peut ètre executée dans la machine java virtuelle.

Dans la foulée le fichier ”tags” (voir \(\backslash\)ref{ctags}) est compilé, ainsi que les fichiers de dépendances des fichiers classes nécessaires à l'execution de la classe contenant la méthode main statique.

Pour des raisons pratiques ( = incapacité de l'auteur) la documentation n'est pas automatiquement générée, mais la règle doit ètre invoquée à la main.

Adaptation de vim
\begin{diapo}{Adaptation de vim}
\begin{liste}
\item Vim
\item Préparatifs
\begi...
...em Complétion des noms de méthodes Java au vol
\end{liste}\end{liste}\end{diapo}