我是新來的Makefile和g ++,我同時使用-MM標誌項目文件的生成依賴的一個問題擊中。我正在發佈我正在使用的Makefile以供您考慮。請看一下。使用問題產生Makefile中的依賴-MM
OUTPUT_ROOT := output/
SOURCE_ROOT := source/
TITLE_NAME := TestProj
SOURCES := \
MyFile.cpp \
stdAfx.cpp \
Main.cpp \
OUT_DIR := $(OUTPUT_ROOT)
OUT_O_DIR := $(OUT_DIR)
OBJS = $(SOURCES:%.cpp=$(OUT_O_DIR)%.o)
DEPS = $(OBJS:%.o=%.d)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
SOURCE_TARGET = $(SOURCES:%.cpp=$(SOURCE_ROOT)%.cpp)
OUTPUT_TARGET = $(OUT_DIR)$(TITLE_NAME)
#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir -p
RM := rm
CC := g++
#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: clean directories objects title
all: directories objects title
directories:
@$(MD) $(DIRS)
clean:
$(RM) -rf $(OUT_DIR)
$(OBJS): $(SOURCE_TARGET)
@$(CC) -c $< -o [email protected]
$(DEPS): $(SOURCE_TARGET)
@$(CC) -c -MM $< > $(DEPS)
-include $(DEPS)
objects:$(OBJS) $(DEPS)
title: $(OBJS)
@$(CC) $< -o [email protected]
我嘗試了幾個選項,sooo很多次。我搜索瞭解決方案,但找不到任何。
是使用「-MM」標誌,以生成依賴正確的選擇?如果不是,請給我建議正確的方法來生成依賴關係。我想自動生成依賴關係,因爲我的項目會有很多文件。我認爲這是比手動編寫evey依賴關係更好的選擇。
這是我收到提前
g++: stdAfx.d: No such file or directory
g++: Main.d: No such file or directory
make: *** No rule to make target `stdAfx.d', needed by `objects'. Stop.
感謝錯誤。
什麼是「DEPS = $(OBJS:%。o =%。d)」應該是在做什麼?爲什麼你有時使用':=',有時'='? – 2009-12-30 12:23:12
它使用對象目錄中對象的名稱創建DEPS。我只是測試'='和':='選項,但不知道確切的差異b/w他們 – Jabez 2009-12-30 12:27:08