相關:Target-specific Variables as Prerequisites in a Makefile的makefile目標特定變量作爲先決條件
我想這手藝使用特定目標變量指定的輸出目錄的對象文件和最終的可執行一個Makefile。我們的想法是維護兩個獨立的二進制版本,一個「發佈」版本和一個帶有額外調試信息的「調試」版本。
我的問題是'make'每次都做一個乾淨的構建,即使我沒有改變一件事情。我非常確定這是因爲'make'正在評估'debug'或'release'目標的先決條件中變量聲明之前目標'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 [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
這是我的構建系統的一個很好的sanitisation,謝謝。我發現有必要添加'| $(OUTPUT_DIR)'作爲制定'.o'文件的規則的先決條件列表,並且我添加了一個'clean'目標,但除此之外,它的工作方式與引用相同。非常感謝。 –
@克里斯,哦,是的,你是對的,我忘了它(固定)。不客氣! ;-) –
感謝您的領導!我現在要解決這個問題。 –