Gnu Make:Strange"多个目标模式" - 错误

时间:2017-01-15 19:03:29

标签: c++ makefile

我已经启动了一个SDL2项目,其中我有一个包含main函数的源文件,该函数依赖于我自己的几个头文件和其他文件夹中的目标文件。我的目录结构如下

/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 $@ $(LFLAGS)

我只使用一个目标文件(common_ana.o)和相应的头文件(common_ana.hpp)对此进行了测试,但问题是make正在抛出一个&#34;多目标模式&#34;规则错误

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

我完全不知道为什么会出现这个错误。 Gnu make手册表明,当误用静态模式规则时会出现此错误。但是我已经对我的Makefile进行了三次检查,并且无法找到任何可以证明gnu make错误消息的理由。虽然我知道一种解决方法,但如果有人能给我一个提示,我对上述静态模式规则做错了,我会很高兴。

1 个答案:

答案 0 :(得分:2)

Make在您的评论之前包含额外的空格,尝试下面的内容

# 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

同样适用于其他行,最好避免内联注释。