Ich habe ein Makefile, das mein Projekt erstellt.Warum erstellt mein Makefile nach einem Release-Build keinen Debug-Ordner?
Es baut gut, wenn mit make
genannt, aber wenn ich versuche und mach ein make debug
danach, es nicht versucht, auch das Debug-Ausgabe-Verzeichnis zu erstellen, die die Verknüpfung nicht bedeutet, auch wenn ich make clean
dazwischen baut nennen.
Der Debug-Build funktioniert, wenn ich den "Freigabe" -Ordner jedoch lösche.
Weiß jemand, warum das passiert?
Makefile
EXEC_DIR = ../../../../Bin/linux/release/
EXECUTABLE = $(EXEC_DIR)/prog
CC = g++
DEBUG = -g -D_DEBUG
...
CFLAGS = -Wall -c $(INCLUDE_DIRS) -std=c++11
LFLAGS = -Wall
...
all : $(EXECUTABLE)
debug : EXEC_DIR = ../../../../Bin/linux/debug/
debug : EXECUTABLE = $(EXEC_DIR)/prog
debug : CFLAGS += $(DEBUG)
debug : LFLAGS += $(DEBUG)
debug : $(EXECUTABLE)
$(EXECUTABLE) : $(OBJS) | $(EXEC_DIR)
$(CC) $(LFLAGS) $(OBJS) -o $(EXECUTABLE)
$(EXEC_DIR) :
mkdir -p $(EXEC_DIR)
...
clean :
-rm *.o *~
Die Zeile 'debug: EXEC_DIR = ../../../../ Bin/linux/debug /' tut nicht, was Sie denken, dass es tut. Was es tut, ist, dass es 'EXEC_DIR' nur für den Bereich des 'debug'-Ziels (nicht global für das Makefile) setzt. – John
Selbst wenn das wie erwartet funktionierte, würde "make" immer noch nichts * anderes * als die ausführbare Datei wiederherstellen, da sich keine der Quelldateien geändert hat. –
Aber mehr zu dem Punkt, den der Wert von 'EXEC_DIR' für das' debug' Ziel gesetzt ist, ist nicht wirksam während der 'debug: EXECUTABLE =' Zuweisungslinie. Das ist das Problem. Sehen Sie sich die Ausgabe von 'make -p' für das' debug'-Ziel an, um das zu sehen. –