Je lis un Makefile de quelqu'un d'autre comme suit.L'optimisation et la génération d'informations de débogage font partie de la compilation ou de la liaison
LDFLAGS=-lm -ljpeg -lpng
ifeq ($(DEBUG),yes)
OPTIMIZE_FLAG = -ggdb3 -DDEBUG -fno-omit-frame-pointer
else
OPTIMIZE_FLAG = -ggdb3 -O3
endif
CXXFLAGS = -Wall $(OPTIMIZE_FLAG)
all: test
test: test.o source1.o source2.o
$(CXX) $(CXXFLAGS) -o [email protected] $^ $(LDFLAGS)
Makefile.depend: *.h *.cc Makefile
$(CC) -M *.cc > Makefile.depend
clean:
\rm -f test *.o Makefile.depend
-include Makefile.depend
Voici mes questions:
Bien que non explicitement, est $ (CXXFLAGS) utilisé par la règle implicite non représentée sur cette Makefile lors de la compilation pour générer des fichiers d'objet?
Je me demande également pourquoi $ (CXXFLAGS) apparaît dans l'étape de liaison? Je pense que c'est seulement pour la phase de compilation? Puis-je supprimer $ (CXXFLAGS) de "$ (CXX) $ (CXXFLAGS) -o $ @ $^$ (LDFLAGS)"? Si je me trompe, cela signifie-t-il que g ++ génère aussi des informations de débogage et fait de l'optimisation au niveau de la liaison? Pourquoi utiliser ensemble -ggdb3 -O3 à des fins de non-débogage?
Pourquoi? Quel devrait être son but? Si seulement envisageant d'améliorer la vitesse, alors n'utilise -O3 que mieux? Pour des raisons de débogage, comment utiliser ensemble -ggdb3 -fno-omit-frame-pointer fera mieux que -ggdb3 seul? J'essaie de comprendre le but de -fno-omit-frame-pointer en lisant le document gcc mais toujours confus. Puis-je déplacer "-include Makefile.depend" pour être juste sous "$ (CC) -M * .cc> Makefile.depend" et au-dessus "nettoyer"? Est-ce que sa position dans Makefile est importante?
Merci beaucoup! Voulez-vous dire que c'est "-ggdb3 -O3" qui est destiné à exécuter le débogueur sur du code optimisé? À des fins de non-débogage, "-ggdb3 -DDEBUG -fno-omit-frame-pointer" n'implique pas d'optimisation, alors pourquoi "-fno-omit-frame-pointer réduit réellement l'optimisation" s'il n'y a pas de code optimisé ? – Tim
Je ne peux pas dire avec certitude. Il n'y a aucune garantie que ce makefile soit totalement cohérent. Peut-être cet ensemble de drapeaux est-il resté d'un autre changement ou la personne qui l'a écrit n'a pas entièrement compris leur signification. –