<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link REL="STYLESHEET" TYPE="text/css" TITLE="Style DILIB" HREF="../../dilib.css"> <style type="text/css"> H2 { text-align: center; } Q { font-style: italic; } TABLE { text-align: center; } </style> <title>Corrigé du TP make</title> </head> <body> <h1>Corrigé du TP make</h1> <a name="bonjour"></a> <h3>Énoncé</h3> <p> Créer un fichier <code>makefile</code> contenant une règle <em>bonjour</em>, qui affiche sur la sortie standard <q>Bonjour, comment ca va?</q> </p> <h3>Solution</h3> <pre>bonjour: @echo "Bonjour, comment ca va?"</pre> <p class="remarque"> L'utilisation du <code>@</code> devant <code>echo</code> rend la commande "silencieuse", elle n'apparaît pas sur la sortie standard. </p> <hr> <a name="bye"></a> <h3>Énoncé</h3> <p> Ajouter une règle <em>bye</em> qui affiche <q>A bientot!</q>. </p> <h3>Solution</h3> <pre>bye: @echo "A bientot!"</pre> <p class="attention"> Le caractère précédent l'action est une tabulation. Pour cette raison, vous ne pouvez copier-coller à partir du HTML. Préférez le <a href="#makefile" title="Instructions de téléchargement">téléchargement du fichier</a> du corrigé. </p> <hr> <a name="modif.txt"></a> <h3>Énoncé</h3> <p> Créer une règle qui crée un fichier <code>modif.txt</code> dont le contenu vient du fichier <a href="original.txt"><code>original.txt</code></a> (que vous pouvez enregistrer grâce au bouton de droite) et qui remplace (grâce à <code><a href="sed.fre.html">sed</a></code>) les apparitions de <q>ILIB</q> par <q>DILIB</q>. </p> <h3>Solution</h3> <pre>modif.txt: original.txt sed -e 's/ILIB/DILIB/g' < original.txt > modif.txt</pre> <p> Le fichier <code>modif.txt</code> depend du contenu du fichier <code>original.txt</code>, c'est pourquoi ce dernier apparaît à droite de <code>:</code>. </p> <hr> <a name="modif2.txt"></a> <h3>Énoncé</h3> <p> Créer une règle qui crée un fichier <code>modif2.txt</code> à partir de <code>original.txt</code> et <a href="table.txt"><code>table.txt</code></a>, en utilisant la table fournie pour modifier le fichier original. </p> <h3>Solution</h3> <pre>modif2.txt: original.txt table.txt sed -f table.txt < original.txt > modif2.txt</pre> <p> Le fichier <code>modif2.txt</code> dépend des contenus des fichiers <code>original.txt</code> et <code>table.txt</code> (si l'un des deux est modifié, la commande <code>sed</code> sera exécutée). </p> <hr> <a name="compte.txt"></a> <h3>Énoncé</h3> <p> Ajouter une règle qui crée un fichier <code>compte.txt</code> contenant le nombre de lignes du fichier <code>modif2.txt</code>. </p> <h3>Solution</h3> <pre>compte.txt: modif2.txt wc -l < modif2.txt > compte.txt</pre> <p> Le fichier <code>compte.txt</code> dépend du fichier <code>modif2.txt</code> (donc de sa règle, qui dépend de <code>original.txt</code> et de <code>table.txt</code>). Donc si on modifie <code>table.txt</code> et qu'on tape <code>make compte.txt</code>, ou toute autre règle qui dépend directement ou indirectement de table.txt, cette règle sera exécutée. </p> <hr> <a name="clean"></a> <h3>Énoncé</h3> <p> Créer une règle <em>clean</em> qui supprime les fichiers dont le nom se termine par <code>~</code>. </p> <h3>Solution</h3> <pre>clean: rm -f *~</pre> <hr> <a name="all"></a> <h3>Énoncé</h3> <p> Créer une règle <em>all</em> qui dépende de <em>bonjour</em>, <em>compte.txt</em>, <em>clean</em>, et <em>bye</em>, mais qui ne contient aucune commande (on peut quand même y mettre un <code>echo -- Make all: exécuté --</code>). </p> <h3>Solution</h3> <pre>all: bonjour compte.txt clean bye @echo --- Make all: exécuté ---</pre> <p class="remarque"> On peut généraliser le <code>@echo --- Make <em>règle</em> exécuté ---</code> à toutes les règles, cela permet de mieux se rendre compte de ce que le make a effectué. </p> <hr> <a name="makefile"></a> <p> Voir le fichier <a href="makefile">makefile</a> complet. </p> <p class="attention"> Le copier-coller à partir du navigateur est insuffisant (les tabulations sont transformées en espaces), il faut donc utiliser le clic droit et sauvegarder le fichier en local. </p> <hr> <address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address> </body> </html>