💾 Archived View for unbon.cafe › lejun › posts › 20221231_make.gmi captured on 2023-05-24 at 18:20:53. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
➡️ Next capture (2023-07-10)
-=-=-=-=-=-=-
Les fichiers makefiles reposent sur la commande `make` très répandue afin de traiter une entrée en une sortie.
.POSIX cible: dépendances commandes shell % L’indentation par tabulation est indispensable
Un fichier makefile basique est composé de 4 éléments : une « cible » à produire – fonction ou nom de fichier –, des dépendances et les commandes. Chaque « règle » permet ainsi d’expliciter une arborescence de « cibles » avec les sorties en extrémité. L’arborescence entière est mise en mémoire avant son exécution de manière à rendre le processus indépendant de l’ordre des règles, par défaut la première cible est implicite lorsqu’aucune cible n’est désignée explicitement. Selon la spécification standard,la première ligne doit être `.POSIX` de sorte à avoir un comportement prévisible.
La commande `make` utilise un lot de règles implicites par défaut, ajouter `.SUFFIXES` en en-tête permet de les écraser. Chaque ligne est indépendante ; attention aux `cd`.
À la manière de git[1], make est capable de détecter la modification d’un fichier et ne créera que les éléments qui en dépendent. Ce fonctionnement explique la convention de définir une cible `all` de manière à pouvoir utiliser la commande `make all` et reconstruire l’ensemble d’un projet. De la même manière, une cible `clean` est généralement utilisée comme alias de `rm` de sorte à supprimer les fichiers intermédiaires via `make clean`.
Toujours par convention, il est d’usage de créer des cibles `install` et `uninstall` avec les macros `PREFIX` et `DESTDIR` pour installer un programme et ses composants.
Des macros peuvent être définis en amont pour être réutilisés plusieurs fois dans un fichier. Par convention, ces variables sont définies en entête de document pour être appelés par la suite via de $(…).
CC=cc $(CC)