Newer
Older
cours-unix-shell / UnixShell_cours2018 / makefile.fre.html
<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&eacute; du TP make</title>
  </head>

  <body>
    <h1>Corrig&eacute; du TP make</h1>

    <a name="bonjour"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Cr&eacute;er un fichier <code>makefile</code> contenant une r&egrave;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&icirc;t pas sur la sortie
      standard.
    </p>
    <hr>
    <a name="bye"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Ajouter une r&egrave;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&egrave;re pr&eacute;c&eacute;dent l'action est une
      tabulation. Pour cette raison, vous ne pouvez copier-coller
      &agrave; partir du HTML. Pr&eacute;f&eacute;rez le 
      <a href="#makefile" title="Instructions de t&eacute;l&eacute;chargement">t&eacute;l&eacute;chargement du fichier</a> du corrig&eacute;.
    </p>
    <hr>
    <a name="modif.txt"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Cr&eacute;er une r&egrave;gle qui cr&eacute;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&acirc;ce au bouton de droite) et qui
      remplace (gr&acirc;ce &agrave; 
      <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' &lt; original.txt &gt; 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&icirc;t &agrave; droite de <code>:</code>.
    </p>
    <hr>
    <a name="modif2.txt"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Cr&eacute;er une r&egrave;gle qui cr&eacute;e un fichier
      <code>modif2.txt</code> &agrave; 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 &lt; original.txt &gt; modif2.txt</pre>
    <p>
      Le fichier <code>modif2.txt</code> d&eacute;pend des contenus des
      fichiers <code>original.txt</code> et <code>table.txt</code> (si
      l'un des deux est modifi&eacute;, la commande <code>sed</code> sera
      ex&eacute;cut&eacute;e).
    </p>
    <hr>
    <a name="compte.txt"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Ajouter une r&egrave;gle qui cr&eacute;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 &lt; modif2.txt &gt; compte.txt</pre>
    <p>
      Le fichier <code>compte.txt</code> d&eacute;pend du fichier
      <code>modif2.txt</code> (donc de sa r&egrave;gle, qui d&eacute;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&egrave;gle qui d&eacute;pend directement
      ou indirectement de table.txt, cette r&egrave;gle sera ex&eacute;cut&eacute;e.
    </p>
    <hr>
    <a name="clean"></a>
    <h3>&Eacute;nonc&eacute;</h3>
    <p>
      Cr&eacute;er une r&egrave;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>&Eacute;nonc&eacute;</h3>
    <p>
      Cr&eacute;er une r&egrave;gle <em>all</em> qui d&eacute;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&ecirc;me y mettre un
      <code>echo -- Make all: ex&eacute;cut&eacute; --</code>).
    </p>
    <h3>Solution</h3>
    <pre>all:	bonjour compte.txt clean bye
	@echo --- Make all: ex&eacute;cut&eacute; ---</pre>
    <p class="remarque">
      On peut g&eacute;n&eacute;raliser le <code>@echo --- Make <em>r&egrave;gle</em>
      ex&eacute;cut&eacute; ---</code> &agrave; toutes les r&egrave;gles, cela permet de mieux se
      rendre compte de ce que le make a effectu&eacute;.
    </p>
    <hr>
    <a name="makefile"></a>
    <p>
      Voir le fichier <a href="makefile">makefile</a> complet.
    </p>
    <p class="attention">
      Le copier-coller &agrave; partir du navigateur est insuffisant (les
      tabulations sont transform&eacute;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>