make: *** 没有创建目标 `obj/main.o' 的规则。停止

make: *** No rule to make target `obj/main.o'. Stop

我正在处理一个 SDL 项目,我正在为该项目使用 makefile 来构建它。我在 windows 上用 MinGW w64 编译器和 make 做这个。

我的项目结构是这样的

proj
------>bin        #stores the executable
------>include    #stroes the external library include files
------>lib        #stores the lib files of the libraries
------>obj        #stores the .o files
------>src        #source files
makefile

我的 makefile 看起来像这样

CC = g++
OUT = main
ODIR = ./obj
SDIR = ./src 
OUTDIR = ./bin
IDIR = ./include 
LDIR = ./lib
libs = -lmingw32 -lSDL2main -lSDL2
OBJS = $(patsubst $(SDIR)/%.cpp,$(ODIR)/%.o,$(wildcard $(SDIR)/*.cpp))

$(ODIR)/%.o : $(SDIR)/%.cpp
    $(CC) -c -I $(IDIR) -o $@ $^

$(OUTDIR)/% : $(OBJS)
    $(CC) -L $(LDIR) -o $@ $^ $(libs)

.PHONY : run

run :
    $(OUTDIR)/$(OUT)

最初,makefile 工作得很好,在我通过编辑 src 变量编辑 makefile 然后取消它之后,make 文件给出了错误

make ./obj/main.o
make: *** No rule to make target `obj/main.o'.  Stop.

我尝试将文件重命名为 MakeFile 或 a.mk 并尝试 运行 它,但即使那样也无济于事。

那么我应该怎么做才能让它发挥作用?

你在这一行有尾随 space:

SDIR = ./src 

删除它,先决条件将正确,makefile 将起作用。