2010-10-14 6 views
-1

Possible en double:
makefile aliasesalias makefile

S'il vous plaît expliquer [email protected] $^ dans le makefile ci-dessous

LIBS = -lkernel32 -luser32 -lgdi32 -lopengl32 
CFLAGS = -Wall 

# (This should be the actual list of C files) 
SRC=$(wildcard '*.c') 

test: $(SRC) 
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 
+2

Exact duplicate: [alias makefile] (http://stackoverflow.com/questions/3932895/makefile-aliases) –

Répondre

0

(Juste au cas où quelques-unes des autres grandes explications ne pas tout à fait frappé la tache)

Le programme « faire » vous permet à utiliser, ce qu'on appelle des variables automatiques. Pour chaque règle qu'il exécute l'action, il analyse les déclarations shell spécifiées dans l'action, et élargit l'une de ces variables automatiques qu'il trouve. Les variables s'étendent aux valeurs dans le contexte de la règle particulière en cours d'exécution à ce point.

Ainsi, dans votre cas, la règle est en cours d'exécution:

test: $(SRC) 

Dans cette règle, "test" est la cible, et quel que soit $ (SRC) se développe pour, les dépendances. Maintenant, comme « faire » analyse l'instruction shell suivante spécifiée dans la partie action de la règle,

gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 

reconnaît $ @ et $^comme variables automatiques. $ @ Est étendu à la cible de la règle actuelle, et $^est étendue aux dépendances, ce qui est « test » et l'expansion de $ (SRC), respectivement.Il exécute les instructions shell après les variables ont été étendues. Vous pouvez voir la dernière version développée qui est exécutée en regardant la sortie de "make". $ (SRC) va, à son tour, se développer au résultat de la fonction "make" "wildcard". Gardez à l'esprit que la syntaxe d'un appel de fonction dans "make" est $ (fonction param ...), et est étendue au résultat de l'appel de la fonction, dans ce cas la liste des fichiers avec ".c" comme suffixe .

4

Ce sont special variables:

[email protected] signifie que la cible si dans votre cas, il est test.

$^ signifie que les noms de toutes les conditions, avec des espaces entre eux. Dans votre cas, c'est la liste de tous les fichiers .c.

SRC=$(wildcard '*.c') utilise la wildcard function pour obtenir la liste de tous les fichiers .c dans le répertoire, qui est ensuite affecté à la SRC variable.

permet de dire qu'il ya deux fichier source C foo.c et bar.c. Votre makefile se efficacement étendu à:

test: foo.c bar.c 
     gcc -o test foo.c bar.c -Wall -lkernel32 -luser32 -lgdi32 -lopengl32 
0

SRC est égale à une fonction générique dans gnu make. C'est une liste de fichiers qui correspondent à ce chemin. Par exemple, il pourrait être

SRC=a.c b.c 

Pour la règle, cela dépend de tous les fichiers source et la cible est test, afin que nous puissions étendre la règle suivante:

gcc -o [email protected] $^  $(CFLAGS) $(LIBS 
gcc -o test $(SRC) $(CFLAGS) $(LIBS) 

puis en suivant par le remplacement CFLAGS, LIBS et SRC avec les extensions correctes.

Pour une documentation à ce sujet, jetez un oeil à ceci: http://www.gnu.org/software/autoconf/manual/make/Automatic-Variables.html