Make
Créer un fichier makefile contenant une règle
bonjour, qui affiche sur la sortie standard Bonjour,
comment ca va?
bonjour: @echo "Bonjour, comment ca va?"
L'utilisation du @ devant echo rend
la commande "silencieuse", elle n'apparaît pas sur la sortie
standard.
Ajouter une règle bye qui affiche A bientot!
.
bye: @echo "A bientot!"
Créer une règle qui crée un fichier
modif.txt dont le contenu vient du fichier
original.txt (que vous
pouvez enregistrer grâce au bouton de droite) et qui
remplace (grâce à sed) les apparitions
de ILIB
par DILIB
.
modif.txt: original.txt sed -e 's/ILIB/DILIB/g' < original.txt > modif.txt
Le fichier modif.txt depend du contenu du fichier
original.txt, c'est pourquoi ce dernier apparaît
à droite de :.
Créer une règle qui crée un fichier modif2.txt à
partir de original.txt et table.txt,
en utilisant la table fournie pour modifier le fichier original.
modif2.txt: original.txt table.txt sed -f table.txt < original.txt > modif2.txt
Le fichier modif2.txt dépend des contenus des
fichiers original.txt et table.txt
(si l'un des deux est modifié, la commande sed
sera exécutée).
Ajouter une ligne à table.txt pour remplacer
CNRS
par Centre National de la Recherche
Scientifique
. Puis relancer make modif2.txt
pour vérifier que la commande a bien été exécutée.
Ajouter une règle qui crée un fichier compte.txt
contenant le nombre de lignes du fichier
modif2.txt.
compte.txt: modif2.txt wc -l < modif2.txt > compte.txt
Le fichier compte.txt dépend du fichier
modif2.txt (donc de sa règle, qui dépend de
original.txt et de table.txt). Donc
si on modifie table.txt et qu'on tape make
compte.txt, ou toute autre règle qui dépend
directement ou indirectement de table.txt, cette règle
sera exécutée.
Créer une règle clean qui supprime les fichiers dont le
nom se termine par ~.
clean: rm -f *~
Si vous utilisez un lecteur Samba (probable à l'INIST), vous
risquez une désynchronisation entre les fichiers enregistrés
par le lecteur Samba et la date de lancement de make (il est
arrivé que les fichiers aient une à deux minutes
d'avance).
Pour limiter de tels problèmes, on peut
utiliser la commande touch, qui remet un fichier
à l'heure courante du shell, mais seulement sur les fichiers
qui viennent d'être modifiés/créés!
Créer une règle all qui dépende de bonjour,
compte.txt, clean, et bye, mais qui
ne contient aucune commande (on peut quand même y mettre un
echo -- Make all: exécuté --).
Remarques :
- L'exécution d'une règle ne donne pas forcément lieu à l'exécution de sa commande. Dans le cas de la production d'un fichier, quand le fichier cible est plus récent que le(s) fichier(s) dont il dépend, le fichier cible n'est pas recréé (donc, la commande de sa règle n'est pas exécutée).
-
Quand une règle dépend d'une autre règle qui dépend d'un autre
fichier, et que ce fichier est modifié (par exemple grâce à la
commande
touch, qui change la date de modification du fichier qu'elle prend en paramètre), les commandes de chacune de ces règles sont exécutées (voir le comportement demake allaprès avoir tapétouch original.txt, ou après avoir ajouté du texte àoriginal.txt).
all: bonjour compte.txt clean bye @echo --- Make all: exécuté ---
On peut généraliser le @echo --- Make règle
exécuté --- à toutes les règles, cela permet de mieux
se rendre compte de ce que le make a effectué.
Pour ceux qui ne l'ont pas fait : modifier le fichier
original.txt, et relancer la règle all.