💾 Archived View for unbon.cafe › lejun › posts › 20221231_make.gmi captured on 2023-01-29 at 17:00:54. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

➡️ Next capture (2023-07-10)

-=-=-=-=-=-=-

Système Make

2022-12-31

Les fichiers makefiles reposent sur la commande `make` très répandue afin de traiter une entrée en une sortie.

Bases

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

Commandes

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.

Macros

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)

[1] Système git, LeJun 2022