(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 .
Exact duplicate: [alias makefile] (http://stackoverflow.com/questions/3932895/makefile-aliases) –