【问题标题】:make: *** No rule to make target `obj/main.o'. Stopmake: *** 没有规则来制作目标“obj/main.o”。停止
【发布时间】:2021-07-20 03:16:34
【问题描述】:

我正在开发一个 SDL 项目,我正在使用 makefile 来构建它。我正在使用 MinGW w64 编译器和 make 在 Windows 上执行此操作。

我的项目结构看起来像这样

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 并尝试运行它,但即使这样也无济于事。

那么我应该怎么做才能让它工作呢?

【问题讨论】:

    标签: c++ makefile gnu-make


    【解决方案1】:

    你在这一行有一个尾随空格:

    SDIR = ./src 
    

    删除它,前提条件将正确,makefile 将起作用。

    【讨论】:

    • make中不可见字符的重要性怎么强调都不过分。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 2012-02-14
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    相关资源
    最近更新 更多