J'ai lu quelques tutoriels concernant Makefiles mais pour moi, on ne sait toujours pas ce que signifie la cible «tout» et ce qu'elle fait.
Des idées?
Une construction, telle que Makefile le comprend, se compose de nombreuses cibles. Par exemple, pour créer un projet, vous pourriez avoir besoin
Si vous avez implémenté ce flux de travail avec makefile, vous pouvez créer chacune des cibles séparément. Par exemple, si vous avez écrit
make file1.o
il ne construirait ce fichier que si nécessaire.
Le nom de all
n'est pas fixe. C'est juste un nom conventionnel; all
target indique que si vous l'invoquez, make construira tout ce qui est nécessaire pour faire une compilation complète . Il s'agit généralement d'une cible factice, qui ne crée aucun fichier, mais dépend simplement des autres fichiers. Pour l'exemple ci-dessus, construire tout ce qui est nécessaire consiste à construire des exécutables, les autres fichiers étant extraits en tant que dépendances. Donc, dans le makefile, cela ressemble à ceci:
all: executable1 executable2
all
target est généralement le premier dans le makefile, car si vous écrivez simplement make
en ligne de commande, sans spécifier la cible, il construira la première cible. Et vous vous attendez à ce que ce soit le cas all
.
all
est généralement aussi une .PHONY
cible. Apprenez-en plus ici .
Le manuel de GNU Make en donne une définition claire all
dans sa liste de cibles standard .
Si l'auteur du Makefile suit cette convention, la cible all
doit:
make
devrait faire la même chose que make all
.Atteindre 1 all
est généralement défini comme une .PHONY
cible qui dépend du ou des exécutables qui forment l'ensemble du programme:
.PHONY : all
all : executable
Pour atteindre 2, il all
faut soit être la première cible définie dans le fichier make, soit être assigné comme objectif par défaut:
.DEFAULT_GOAL := all
Pas sûr que cela représente quelque chose de spécial. C'est juste une convention que vous fournissez une règle «tous», et généralement elle est utilisée pour lister toutes les sous-cibles nécessaires pour construire le projet entier, d'où le nom «tous». La seule chose spéciale à ce sujet est que souvent les gens le placent comme première cible dans le fichier makefile, ce qui signifie que le simple fait de taper «make» seul fera la même chose que «make all».
La cible «tout» est un exemple de cible factice - il n'y a rien sur le disque appelé «tout». Cela signifie que lorsque vous faites un "make all", make pense toujours qu'il a besoin de le construire, et donc exécute toutes les commandes pour cette cible. Ces commandes seront généralement celles qui construisent tous les produits finaux que le makefile connaît, mais il pourrait faire n'importe quoi.
D'autres exemples de cibles factices sont «nettoyer» et «installer», et ils fonctionnent de la même manière.
Si vous ne l'avez pas encore lu, vous devriez lire le manuel GNU Make , qui est également un excellent tutoriel.