2017-01-15 23 views
0

我已經啓動了一個SDL2項目,其中有一個源文件包含主函數,該函數依賴於我自己的頭文件和其他文件夾中的幾個對象文件。我的目錄結構如下Gnu Make:奇怪的「多目標模式」 - 錯誤

/SDL2 // Top-Level directory of all my SDL2 projects 
-> /projectX // My current project 
    -> main.cpp 
-> /obj_sdl2_ana // Directory of all self-made object files 
    -> ...object files 
    -> ...source files of object files 
-> /include_sdl2_ana // Directory of all self-made header files 
    -> ..header files 

編譯和鏈接的main.cpp對我的目標和頭文件我寫了下面的Makefile

TARGET = main 
FILETYPE = cpp 
OBJDIR = ../obj_sdl2_ana/ # Directory with self-made object files 
INCDIR = ../include_sdl2_ana/ # Directory with self-made header files 
IFLAGS = -I$(INCDIR) 
LFLAGS = -lSDL2 -lSDL2_image # insert all necessary libraries into it 
VPATH = $(OBJDIR):$(INCDIR) 
ADD_RESOURCES = common_ana 

ADD_INC := $(ADD_RESOURCES:%=$(INCDIR)%.hpp) # specify header files which are prerequisites 
ADD_OBJ := $(ADD_RESOURCES:%=$(OBJDIR)%.o) # specify additional object files which are prerequisites 

$(TARGET): $(TARGET).o $(ADD_OBJ) 
    g++ $(TARGET).o $(ADD_OBJ) -g3 -o $(TARGET) $(LFLAGS) 

$(TARGET).o: $(TARGET).$(FILETYPE) $(ADD_INC) 
    g++ -c $(TARGET).$(FILETYPE) $(IFLAGS) -g3 -o $(TARGET).o $(LFLAGS) 

$(ADD_OBJ): $(OBJDIR)%.o: $(OBJDIR)%.cpp $(INCDIR)%.hpp 
    g++ -c $< $(IFLAGS) -g3 -o [email protected] $(LFLAGS) 

我都只有一個目標文件測試了這個(common_ana的.o)和相應的頭文件(common_ana.hpp),但問題是,提出的是在規則折騰了「多目標模式」的錯誤

$(ADD_OBJ): $(OBJDIR)%.o: $(OBJDIR)%.cpp $(INCDIR)%.hpp 
    g++ -c $< $(IFLAGS) -g3 -o [email protected] $(LFLAGS) 

我絕對沒有線索,爲什麼會出現此錯誤。 Gnu make手冊提示,如果濫用靜態模式規則,則會出現此錯誤。但是我已經對我的Makefile進行了三重檢查,並且找不到任何證明gnu make錯誤信息的東西。雖然我意識到一種解決方法,但是如果有人能夠給我一個提示,我對於上述靜態模式規則做了什麼錯誤感到非常高興。

回答

2

提出的是,包括你的意見之前,額外的空間,嘗試一些下面

# Directory with self-made object files 
OBJDIR = ../obj_sdl2_ana/ 
# Directory with self-made header files 
INCDIR = ../include_sdl2_ana/ 
IFLAGS = -I$(INCDIR) 
# insert all necessary libraries into it 
LFLAGS = -lSDL2 -lSDL2_image 

同樣適用於其它線路,最好避免內部註釋。