Verwandte: Target-specific Variables as Prerequisites in a MakefileMake-Datei zielspezifische Variablen als Voraussetzungen
Ich versuche, ein Makefile zu fertigen, die ein zielspezifische-Variable verwendet das Ausgabeverzeichnis für die Objektdateien und die endgültigen ausführbaren Datei angeben. Die Idee besteht darin, zwei separate Binärversionen zu unterhalten, eine "Release" -Version und eine "Debug" -Version mit zusätzlichen Debugging-Informationen.
Mein Problem ist, dass 'make' jedes Mal ein sauberes Build erstellt, auch wenn ich nichts geändert habe. Ich bin mir ziemlich sicher, dass es ist, weil 'make' die Voraussetzungen des Ziels 'corewars' vor der Variablendeklaration in den Voraussetzungen für das 'debug' oder 'release' Ziel auswertet.
Das Makefile ist unten dargestellt.
CXX=g++
LD=g++
LDFLAGS=
CXXFLAGS=-Iinclude -Wall -Wextra
OBJECTS=main.o Machine.o Core.o ProcessQueue.o Instruction.o
OUTPUT_DIR:=Test/
.PHONY: default
.PHONY: all
.PHONY: release
default: release
all: release
release: OUTPUT_DIR:=Release/
release: corewars
.PHONY: debug
debug: CXXFLAGS+=-DDEBUG -g
debug: OUTPUT_DIR:=Debug/
debug: corewars
corewars: $(OUTPUT_DIR) $(addprefix $(OUTPUT_DIR),$(OBJECTS))
$(LD) -o $(addprefix $(OUTPUT_DIR),corewars) $(addprefix $(OUTPUT_DIR),$(OBJECTS))
Release:
mkdir -p [email protected]
Debug:
mkdir -p [email protected]
%.o: %.cpp include/%.h
$(CXX) -c $(CXXFLAGS) $< -o $(OUTPUT_DIR)[email protected]
.PHONY: clean
clean:
$(RM) -r Release
$(RM) -r Debug
Dies ist eine ausgezeichnete Sanitisierung meines Build-Systems, danke. Ich fand es notwendig, '| hinzuzufügen $ (OUTPUT_DIR) 'in die Liste der Voraussetzungen für die Regel, um' .o' Dateien zu machen, und ich habe ein 'sauberes' Ziel hinzugefügt, aber ansonsten funktioniert das wie zitiert. Danke vielmals. –
@Chris, oh ja, du hast Recht, ich habe es vergessen (behoben). Und gern geschehen! ;-) –
Danke für die Köpfe hoch! Ich werde das jetzt reparieren. –