De parler à l'égard de GNU make, quelle est la différence entre les FAUSSES cibles all:
et default:
.
CC=g++
default: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
et
CC=g++
all: hello
hello: hello.cpp
$(CC) -o hello hello.cpp
Les deux font le même travail.
OriginalL'auteur sinister | 2014-12-02
Vous pouvez les appeler
shirley
si vous le souhaitez; ni les étiquettes que vous mentionnez a tout spécial de la sémantique. Le comportement par défaut demake
est de lancer la première cible dans leMakefile
si vous ne spécifiez pas une cible comme un argument de ligne de commande. Si vous souhaitez modifier ce comportement, il y a le.Valeur par DÉFAUT:
cible particulière.Il y a une convention d'avoir une cible nommée
all
qui s'appuie tout, mais c'est juste de l'homme convention, et non un cas particulier ou d'une exigence aussi loin que de Faire de l'.De même, il y a une (faible) de la convention à l'appel de la cible par défaut
default
, mais de la même manière, c'est juste un homme de l'étiquette (et un peu de chevauchements et, éventuellement, des conflits avec lesall
convention).De sorte que le Makefile suivant fait exactement la même chose:
Vous pouvez omettre l'un ou de tous les faux objectifs ci-dessus, et la seule différence sera que les humains ne seront pas en mesure de dire
make shirley
quand ils (efficacement) moyennemake hello
.Ligne du bas: Construire votre Makefile pour que
make
fait ce raisonnable de l'utilisateur final s'attend sans lire trop deREADME
fichiers ou l'inspection de l'Makefile
. Souvent qui seramake all
(et vous devriez probablement avoir un objectif, avec ce nom, juste pour satisfaire les conventions, même si ce n'est pas la valeur par défaut), mais évidemment, cela dépend de votre projet et les attentes de vos utilisateurs..DEFAULT
spécial cible est pas la façon de remplacer la valeur par défaut de l'objectif. La valeur par défaut but est la première règle dans le fichier "makefile" qui ne commence pas par '.' -- à moins remplacées par la spécification de la variable spéciale.DEFAULT_GOAL
. Pour informer les lecteurs d'une très longue makefile, il est préférable de spécifier .DEFAULT_GOAL ou d'écrire une règle (généralement un mannequin règle commedefault: all
avec pas de recette) très tôt dans le makefile.Je suis d'accord avec votre conclusion finale. Cependant, je tiens à propos
.DEFAULT_GOAL
piratage, principalement ésotérique porte arrière qui devraient peut-être être évités, et manuel exemple de comment l'utiliser certainement renforce cette impression.OriginalL'auteur tripleee
L'un est écrit "tous" et l'autre est orthographié "par défaut". Il n'y a pas d'autre différence entre eux. Peut-être que si vous l'avez expliqué pourquoi vous posez cette question, nous serions en mesure d'aider plus.
Noter que dans l'exemple ci-dessus, ni les cibles sont en fait faux. Vous devez les déclarer en tant que tel:
etc.
PHONY
, mais ont été ces 2 mots-clés destinés à indiquer la même chose? n'est-ce pas bizarre, pourquoi aurait-on besoin d'un autre si l'on existait déjà?voir tripleee réponse:
all
etdefault
règles n'ont aucune signification particulière, ils sont régulièrement règles régulières noms.OriginalL'auteur MadScientist
La seule différence, c'est que
all
est recommandé dans le GNU Make manuel, pour être le premier (par défaut) de la cible, etdefault
n'a pas une telle recommandation spéciale.OriginalL'auteur Mark Galeck