Newer
Older
cours-unix-shell / output / make / README.html
<!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 &lt; aCompter.txt &gt; 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>&copy; CNRS 2023</p>
    </footer>
</body>

</html>