Quelqu'un peut-il s'il vous plaît expliquer la signification de $<
et [email protected]
dans un Makefile
?
Répondre
$<
évalue à la première "prérequis" dans la règle make, et [email protected]
évalue à la "cible" dans la règle make.
Voici un exemple:
file.o : file.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]
Dans ce cas, $<
sera remplacé par file.c
et [email protected]
sera file.o
.
Ce sont plus utiles dans les règles génériques comme ceci:
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected]
Voir this manual pour plus d'informations.
Notez que bien que les deux exemples ci-dessus fonctionnent avec GNU Make, ils ne sont pas portables. POSIX ne définit pas% de règles et définit $
D'autre part, écrire Makefiles devient tellement plus facile si vous vous limitez à GNU make. (qui est portable à plus ou moins toutes les plates-formes existantes) – JesperE
(... en attendant que quelqu'un me dise quelles plates-formes GNU font ne sont pas disponibles sur ...) – JesperE
[email protected]
est la cible de la règle actuelle. $<
est le nom du premier prérequis ("source") de la règle actuelle.
Ainsi, par exemple:
.c.o:
$(CC) -c $(CFLAGS) -o [email protected] $<
Cela permettra d'élargir à une commande quelque chose comme:
gcc -c -Wall -o foo.o foo.c
Voir aussi la GNU make manual § 10.5.3, "Automatic Variables".
Que faire si vous avez plusieurs fichiers source pour une seule cible? – MarcusJ
@MarcusJ Comme mentionné dans la réponse, '$ <' est le nom du * premier * pré-requis. Vous pouvez suivre le lien dans la réponse pour les autres variables automatiques ('$?', '$ ^', '$ +', '$ |') Qui vous donneront plus que le premier pré-requis. –
Qu'est devenue la bonne vieille tradition de lire le bon manuel? – Jens
Qui lit 200 pages de documents pour quelques questions simples? – MarcusJ
La recherche dans un document de 200 pages serait facile si GNU Make ne le rendait pas difficile. Sur mon système, il s'agit d'une page * man * (vous savez, * man * pour * manual *) qui n'explique rien de tout cela, mais fait référence à * The GNU Make Manual * sans me dire comment le trouver. Donc, Google est la réponse, et le fait de donner '$ @' à Google fournit la réponse (à ma grande surprise). – reinierpost