J'ai lu quelques tutoriels concernant Makefiles mais pour moi, il est encore difficile de savoir ce que la cible "tout" représente et ce qu'elle fait.
Des idées?
Comme Makefile le comprend, une compilation consiste en un grand nombre de cibles. Par exemple, pour construire un projet, vous devrez peut-être
Si vous avez implémenté ce workflow avec makefile, vous pouvez créer chacune des cibles séparément. Par exemple, si vous avez écrit
make file1.o
il ne ferait que construire ce fichier, si nécessaire.
Le nom de all
n'est pas corrigé. C'est juste un nom conventionnel; all
cible indique que si vous l'invoquez, make construira tout ce qui est nécessaire pour créer un build complet. 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, la construction all est nécessaire pour la construction 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 élément du makefile, car si vous écrivez simplement make
en ligne de commande, sans spécifier la cible, la première cible sera construite. Et vous vous attendez à ce que ce soit all
.
all
est généralement aussi un .PHONY
cible. En savoir plus ici .
Le manuel pour GNU Make donne une définition claire de all
dans son liste des cibles standard) .
Si l'auteur du Makefile suit cette convention, la cible all
devrait:
make
devrait faire la même chose que make all
.Atteindre 1 all
est généralement défini comme un .PHONY
cible qui dépend du ou des exécutables constituant l’ensemble du programme:
.PHONY : all
all : executable
Pour atteindre 2 all
devrait être la première cible définie dans le fichier make ou être assigné comme objectif par défaut:
.DEFAULT_GOAL := all
Pas sûr que cela représente quelque chose de spécial. Il s'agit simplement d'une convention selon laquelle vous fournissez une règle "tout", généralement utilisée pour répertorier toutes les sous-cibles nécessaires à la construction du projet dans son ensemble, d'où le nom "tout". La seule chose spéciale à cela est que souvent, les gens le placent comme première cible du fichier makefile, ce qui signifie que simplement taper "make" seul fera la même chose que "make all".
La cible "tous" est un exemple de cible factice - rien sur le disque ne s'appelle "tous". Cela signifie que lorsque vous faites un "make all", make pense toujours qu'il a besoin de le construire, et exécute ainsi toutes les commandes pour cette cible. Ces commandes sont généralement celles qui construisent tous les produits finaux que le makefile connaît, mais il peut tout faire.
Les autres exemples de cibles factices sont "clean" et "install", et ils fonctionnent de la même manière.
Si vous ne l'avez pas encore lu, vous devriez lire le GNU Make Manual , qui est également un excellent tutoriel.