2010-03-25 3 views

Répondre

79

Une construction, comme Makefile le comprend, comprend beaucoup de cibles. Par exemple, pour construire un projet que vous pourriez avoir besoin

  1. Construire file1.o sur fichier1.c
  2. file2.o Build de fichier2.c
  3. Construire file3.o sur file3.c
  4. executable1 Build de file1.o et file3.o
  5. executable2 Build de file2.o

Si vous avez implémenté ce flux de travail avec makefile, vous pouvez faire chacun des objectifs separatel y. Par exemple, si vous avez écrit

make file1.o 

il construira uniquement 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'appelez, make va construire tous ce qui est nécessaire pour faire une compilation complète. C'est généralement une cible fictive, qui ne crée aucun fichier, mais dépend simplement des autres fichiers. Pour l'exemple ci-dessus, la construction tous les nécessaires est la construction d'exécutables, les autres fichiers étant tirés en tant que dépendances. Ainsi, dans le makefile, il ressemble à ceci:

cible
all: executable1 executable2 

all est habituellement le premier dans le makefile, car si vous écrivez juste make dans la ligne de commande, sans spécifier la cible, il va construire la première cible. Et vous vous attendez à ce que ce soit all.

all est généralement aussi une cible .PHONY. En savoir plus here.

2

Vous ne savez pas si cela correspond à quelque chose de spécial. C'est juste une convention que vous fournissez une règle «tout», et généralement il est utilisé pour lister toutes les sous-cibles nécessaires pour construire le projet entier, d'où le nom «tout». La seule chose spéciale à ce sujet est que souvent les gens la placent comme première cible dans le makefile, ce qui signifie que le fait de taper 'make' seul fera la même chose que 'make all'.

1

La cible "tout" est un exemple de cible fictive - il n'y a rien sur le disque appelé "tout". Cela signifie que lorsque vous faites un "make all", faites toujours penser qu'il a besoin de le construire, et ainsi exécute toutes les commandes pour cette cible. Ces commandes seront généralement celles qui construisent tous les produits finaux que le fichier makefile connaît, mais il pourrait faire n'importe quoi.

D'autres exemples de cibles factices sont «propre» et «install», et fonctionnent de la même manière.

Si vous ne l'avez pas encore lu, vous devriez lire le GNU Make Manual, qui est aussi un excellent tutoriel.

+0

Et n'oubliez pas Mr.Proper (accessoirement mrproper) et distclean ... – t0mm13b

18

Le manuel pour GNU Make donne une définition claire pour all dans son list of standard targets.

Si l'auteur du Makefile suit cette convention alors la cible all devrait:

  1. Compile l'ensemble du programme, mais pas Documentation_sur_la_compilation.
  2. Soyez la cible par défaut. Comme en cours d'exécution juste make devrait faire la même chose que make all.

Pour atteindre une all est généralement définie comme une cible .PHONY qui dépend de l'exécutable (s) qui forment l'ensemble du programme:

.PHONY : all 
all : executable 

Pour atteindre 2 all doit être soit la première cible définie dans le fichier make ou être assigné comme objectif par défaut:

.DEFAULT_GOAL := all