[英]Makefile builds everything each time
我有以下Makefile(減少為忽略無關的內容):
BUILD_DIR=./build
OBJS = \
$(BUILD_DIR)/main.o \
$(BUILD_DIR)/common.o \
...
roo: $(OBJS)
$(CXX) -o $@ $(OBJS) $(LFLAGS)
.PHONY: $(BUILD_DIR)
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)/passes
$(BUILD_DIR)/%.o: src/%.cpp $(BUILD_DIR)
$(CXX) -o $@ -c $< $(CFLAGS)
但是,每次都會重新編譯每個目標文件,甚至以為我遵循的規則是在每個非語音目標中直接使用$@
。
我不認為這是一個重復的這個 ,因為我申請的子目錄中的規則,而不是在食譜,但我可能是錯了嗎? 如何獲得Make來正確跟蹤構建目錄中的依賴關系?
您已經說過$(BUILD_DIR)/%.o
取決於$(BUILD_DIR)
,但是每次將文件添加到該目錄時都會觸摸該目錄(例如,此規則本身)。 也就是說, $(BUILD_DIR)
將始終比其目標新。
您似乎要自動創建構建目錄。 我認為最好的方法是
$(BUILD_DIR)/%.o: src/%.cpp
mkdir -p $(BUILD_DIR)/passes
$(CXX) -o $@ -c $< $(CFLAGS)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.