J'ai le makefile suivant pour mon projet, et j'aimerais le configurer pour les builds release et debug. Dans mon code, j'ai beaucoup de #ifdef DEBUG
en place, il s'agit donc simplement de définir cette macro et d'ajouter l'élément -g3 -gdwarf2
aux compilateurs. Comment puis-je faire cela ?
$(CC) = g++ -g3 -gdwarf2
$(cc) = gcc -g3 -gdwarf2
all: executable
executable: CommandParser.tab.o CommandParser.yy.o Command.o
g++ -g -o output CommandParser.yy.o CommandParser.tab.o Command.o -lfl
CommandParser.yy.o: CommandParser.l
flex -o CommandParser.yy.c CommandParser.l
gcc -g -c CommandParser.yy.c
CommandParser.tab.o: CommandParser.y
bison -d CommandParser.y
g++ -g -c CommandParser.tab.c
Command.o: Command.cpp
g++ -g -c Command.cpp
clean:
rm -f CommandParser.tab.* CommandParser.yy.* output *.o
Juste pour clarifier, quand je parle de versions release/debug, je veux pouvoir simplement taper make
et obtenir une version de lancement ou make debug
et obtenir une construction de débogage, sans commenter manuellement des choses dans le makefile.
12 votes
Attention ! $(CC) = quelque chose est différent de CC = quelque chose
6 votes
La cible exécutable viole la règle d'or des makefiles : chaque cible doit mettre à jour le fichier qui nomme la cible, dans votre cas "exécutable".
4 votes
Et si ce n'est pas le cas, il faut le déclarer.
.PHONY