Compilation avec des drapeaux dans un Makefile
Pour clarifier les choses, supposons que je suis la compilation d'un programme (prg
) avec 3 fichiers, main.c
, person.h
et person.c
.
Si j'utilise la concision de la rédaction du makefile, comme ceci (plus particulièrement les deux dernières lignes):
prg : main.o person.o
gcc -Wall -o prg -c $^
main.o : person.h
person.o : person.h
Sera le -Wall
être appliquée à main.o
et person.o
automatiquement? Ou qui n'est pas même question?
Je sais que, comme le fichier dit, si person.o
doit être re-compilé, prg
aurez besoin d'un re-construire aussi. Mais, je ne sais pas si la spécification de -Wall
uniquement dans le but principal est suffisant pour permettre la réalisation des autres objectifs si des avertissements sont émis que les autres sont compilés.
Peut-être que je suis absent quelque chose de vraiment important, ou je suis en train de dire quelque chose qui n'a pas de sens; mais take it easy, je suis juste un débutant 😛
À cette question, le titre semble erroné. La question est à propos de faire, pas sur gcc drapeaux.
Thornley: j'ai juste modifié, j'espère que c'est plus clair maintenant. Désolé pour la confusion.
Je vous remercie beaucoup. C'est bien mieux maintenant.
OriginalL'auteur sidyll | 2011-05-03
Vous devez vous connecter pour publier un commentaire.
Puisque vous appliquez le
-Wall
à la phase de liaison (lors de la collecte des fichiers de l'objet dans un fichier exécutable), mais cette option s'applique à la phase de compilation (en convertissant les fichiers source dans les fichiers objets), il ne fournit aucune prestation où il est écrit.Vous devez modifier la compilation par la définition des macros.
Normalement, la règle pour la compilation d'un fichier source C à un fichier de l'objet ressemble à quelque chose comme:
Il pourrait y avoir d'autres éléments sont là, et la notation peut utiliser autre chose que
$*.c
pour identifier le fichier source - là sont semblables (à peu près équivalent) méthodes de spécification, mais c'est tangentielle au point que je suis en train de faire. Le$(CC)
notation est équivalente à${CC}
trop.Donc, pour changer de compilateur, vous précisez "
CC=new_c_compiler
" et de modifier les options de compilation, vous (avec prudence) spécifier 'CFLAGS=-Wall
'.Cela peut être fait dans le fichier makefile, ou sur la ligne de commande. La ligne de commande remplace le fichier makefile.
Donc:
Pourquoi prudemment? Parce que dans les situations plus complexes, il peut y avoir une définition complexe de la variable CFLAGS qui de le construire à partir d'un certain nombre de sources, et allègrement réglage
CFLAGS = -Wall
risquez de perdre vos chemins d'inclusion, les définitions de macros, et de toutes sortes. Dans votre cas, il semble que vous pouvez tout simplement mis comme indiqué.Si vous utilisez GNU Make, vous pouvez simplement ajouter
-Wall
àCFLAGS
:Cela ne fonctionne pas nécessairement avec toutes les variétés de
make
.Votre ligne de liaison peut éventuellement besoin de recueillir une partie de la bibliothèque des options liées à la trop.
OriginalL'auteur Jonathan Leffler
Non, les drapeaux ne sera pas magiquement être appliqué à d'autres cibles.
Ajouter une ligne comme celle-ci vers le haut de votre Makefile, au-dessus des règles:
Puis essayer sans la ligne explicite pour
prg
.OriginalL'auteur unwind