Ce qui ne le makefile symboles $@ et $< moyenne?
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
Que faire de la $@
et $<
faire exactement?
- Le lien ci-dessus est cassé, voici un autre: gnu.org/software/make/manual/html_node/Automatic-Variables.html
- Salut qu'est-ce ".rpc.o:" comme une cible veux dire? (avant dernière ligne?).
- L' ".rpc.o:" bâtir ".o" (les fichiers objets) à partir de ".rpc" (fichiers sources)
- Je sens qu'il devrait être noté, il y a un tutoriel sur le lien suivant de qui, je crois, Mohit obtenu le makefile à son poste. mrbook.org/blog/tutorials/make
Vous devez vous connecter pour publier un commentaire.
$@
est le nom du fichier généré, et$<
la première condition (généralement le fichier source). Vous pouvez trouver une liste de toutes ces variables spéciales dans le GNU Make manuel.Considérons, par exemple, la déclaration suivante:
Dans ce cas:
$@
évalue àall
$<
évalue àlibrary.cpp
$^
évalue àlibrary.cpp main.cpp
$@
ne doit pas nécessairement être un fichier, il pourrait aussi être le nom d'un.PHONY
cible.$@s
pour générer l'assembly de sortie tels que le nom.os?La
$@
et$<
sont appelés variables automatiques. La variable$@
représente le nom du fichier à été créé (c'est à dire la cible) et$<
représente la première condition nécessaire pour créer le fichier de sortie.Par exemple:
Ici,
hello.o
est le fichier de sortie. C'est ce que$@
développe. La première dépendance esthello.c
. C'est ce que$<
développe.La
-c
drapeau génère le.o
fichier; voirman gcc
pour une explication plus détaillée. Le-o
spécifie le fichier de sortie pour créer.Pour plus de détails, vous pouvez lire cet article à propos de Linux Makefiles.
Aussi, vous pouvez consulter la GNU
make
manuels. Il sera plus facile de faire des Makefiles et à déboguer.Si vous exécutez cette commande, il sera de sortie le fichier makefile de base de données:
$<
étendra àhello.c hello.h
(les deux). S'il vous plaît, préciser.$<
est juste le premier élément. Inclure toutes les utiliser$^
.De Gestion de Projets avec GNU Make, 3e Édition (c'est en vertu de Licence de Documentation Libre GNU):
La
$@
et$<
sont les macros.Où:
$@
est le nom de fichier de la cible.$<
est le nom de la première dépendance.Le Makefile construit le
hello
exécutable si l'un demain.cpp
,hello.cpp
,factorial.cpp
changé. La plus petite possible Makefile pour atteindre cette précision aurait pu être:Pour améliorer ci-dessus, nous avons seulement de compiler ces fichiers C++ qui ont été modifiés. Ensuite, nous avons juste un lien de la résultante des fichiers objets ensemble.
Améliorer cette situation, nous pouvons remplacer l'objet de toutes les règles de fichier avec un seul
.cpp.o
règle:Ici la
.cpp.o
règle définit comment construireanyfile.o
deanyfile.cpp
.$<
correspond à la première dépendance, dans ce cas,anyfile.cpp
$@
correspond à la cible, dans ce cas,anyfile.o
.Les autres changements présents dans le Makefile sont:
en exemple si tu veux compiler les sources, mais les objets sont dans un répertoire différent :
u besoin de le faire :
mais dans la plupart des cas (avec d'autres macros) le résultat sera :
afin de ne compiler quoi que ce soit ^^ et u ne sera pas en mesure de mettre vos objets de fichiers dans un autre répertoire 🙁
la solution est d'utiliser ces macros
cela va générer une .o fichier (obj/fichier.o) pour chaque .c fichier SRC (src/fichier.c)
cela signifie :
mais les lignes par lignes au LIEU de toutes les lignes de l'OBJ suivie par toutes les lignes de la SRC