Make

2022-12-31

Les fichiers Makefile 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

Proxy Information
Original URL
gemini://unbon.cafe/lejun/posts/20221231_make.gmi
Status Code
Success (20)
Meta
text/gemini;
Capsule Response Time
251.391068 milliseconds
Gemini-to-HTML Time
0.466756 milliseconds

This content has been proxied by September (3851b).