<!DOCTYPE html>
<html>
<head>
<title>Make - UNIX</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>Make - UNIX</h1>
<nav>
<ul>
<li><a href="/output/README.html">Accueil</a></li>
<li><a href="/output/unix/README.html">UNIX</a></li>
<li><a href="/output/bases/README.html">Bases</a></li>
<li><a href="/output/commandes/README.html">Commandes</a></li>
<li><a href="/output/shell/README.html">Shell</a></li>
<li><a href="/output/sed/README.html">Sed</a></li>
<li><a href="/output/make/README.html">Make</a></li>
</ul>
</nav>
</header>
<div class="content">
<h1 id="make---unix">Make - UNIX</h1>
<p>GNU Make est un héritier de <code>make</code>, mais sous Linux, c'est bien GNU Make qui est installé.</p>
<p>Make permet de gagner du temps par rapport aux shells: on n'exécute que ce qui est nécessaire, en fonction des changements de source par rapport à leur cible.</p>
<p>Un shell fait tous les traitements qui y sont indiqués.</p>
<figure>
<img src="../images/Shell.gif" alt="Un shell fait tous les traitements qui y sont indiqués" /><figcaption>Un shell fait tous les traitements qui y sont indiqués</figcaption>
</figure>
<p>Un make ne fait que les traitements qui sont nécessaires.</p>
<figure>
<img src="../images/Make.gif" alt="Un make ne fait que les traitements qui sont nécessaires" /><figcaption>Un make ne fait que les traitements qui sont nécessaires</figcaption>
</figure>
<h2 id="syntaxe">Syntaxe</h2>
<p>Le fichier <code>Makefile</code> contient les règles de dépendance.</p>
<p>Une règle est de la forme :</p>
<pre class="make"><code>cible: [fichier de départ] ...
commande</code></pre>
<blockquote>
<p>⚠ La commande doit être précédée d'une tabulation!</p>
</blockquote>
<p>Pour créer le fichier cible : <code>make cible</code></p>
<p>Exemple de fichier <code>Makefile</code> :</p>
<pre class="make"><code># Commentaire
compte.txt: aCompter.txt
wc -l < aCompter.txt > compte.txt</code></pre>
<p>La deuxième fois qu'on lance la cible <code>compte.txt</code>, la commande <code>wc</code> n'est pas exécutée, sauf si le fichier <code>aCompter.txt</code> a une date de modification plus récente que celle de <code>compte.txt</code>.</p>
<p>Une règle qui ne dépend d'aucun fichier de départ peut exister.<br />
De plus, elle ne peut donner lieu à la création d'un fichier.<br />
Une telle règle sera toujours exécutée (à condition que son nom ne soit pas celui d'un fichier).</p>
<h2 id="références">Références</h2>
<ul>
<li><a href="https://www.gnu.org/savannah-checkouts/gnu/make/manual/make.html" class="uri">https://www.gnu.org/savannah-checkouts/gnu/make/manual/make.html</a> Make Manual</li>
<li><a href="https://make.mad-scientist.net/" class="uri">https://make.mad-scientist.net/</a> GNU Make</li>
<li><a href="https://tech.davis-hansson.com/p/make/" class="uri">https://tech.davis-hansson.com/p/make/</a> Pour les spécialistes</li>
</ul>
<p><a href="../sed/tp.html">Précédent</a> - <a href="./tp.html">Suivant</a></p>
</div>
<footer>
<p>© CNRS 2023</p>
</footer>
</body>
</html>