TRAVAUX PRATIQUES

Make

Créer un fichier makefile contenant une règle bonjour, qui affiche sur la sortie standard Bonjour, comment ca va?

Cacher la solution
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!.

Cacher la solution
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.

Cacher la solution
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.

Cacher la solution
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.

Cacher la solution
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 ~.

Cacher la solution
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 :

Cacher la solution
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.


Philippe.Houdry@inist.fr