<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>