Целевые переменные make-файла в качестве предпосылок

Связанные: Целевые переменные как предпосылки в Makefile

Я пытаюсь создать Makefile, который использует целевую переменную для укажите выходной каталог для объектных файлов и конечного исполняемого файла. Идея состоит в том, чтобы поддерживать две отдельные бинарные версии: «выпускную» версию и «отладочную» версию с дополнительной отладочной информацией.

Моя проблема в том, что 'make' каждый раз выполняет чистую сборку, даже если я ничего не менял. Я почти уверен, что это потому, что «сделать» оценивает предварительные условия цели «corewars» перед объявлением переменной в предварительных условиях для цели «отладки» или «выпуска».

Makefile представлен ниже.

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 $@
Debug:
    mkdir -p $@

%.o: %.cpp include/%.h
    $(CXX) -c $(CXXFLAGS) $< -o $(OUTPUT_DIR)$@


.PHONY: clean
clean:
    $(RM) -r Release
    $(RM) -r Debug

6
задан Community 23 May 2017 в 11:46
поделиться