Makefile 对象文件不是在子目录中创建的,而是在主目录中创建的

Makefile 对象文件不是在子目录中创建的,而是在主目录中创建的,makefile,Makefile,我的makefile中有以下代码: #Compiler CC = g++ IDIR = headers SRCDIR = sources ODIR = obj LIBS = -lncurses CFLAGS = -I$(IDIR) DE = Cow.h Sheep.h DES = $(patsubst %,$(IDIR)/%,$(DE)) _O = Cow.o Sheep.o OB = $(patsubst %,$(ODIR)/%,$(_O)) all: make ./make

我的makefile中有以下代码:

#Compiler
CC = g++

IDIR = headers
SRCDIR = sources
ODIR = obj
LIBS = -lncurses
CFLAGS = -I$(IDIR)

DE = Cow.h Sheep.h
DES = $(patsubst %,$(IDIR)/%,$(DE))

_O = Cow.o Sheep.o
OB = $(patsubst %,$(ODIR)/%,$(_O))

all: make
    ./make

make: $(OB) $(ODIR)/main.o $(DES)
    $(CC) -W -Wall -o $@ $^ $(CFLAGS) $(LIBS)

$(ODIR)/%.o: $(SRCDIR)/%.c $(DES)
    $(CC) -W -Wall -c -o $@ $< $(CFLAGS)

$(ODIR)/main.o: $(SRCDIR)/main.cpp
    $(CC) -c -o $@ $< $(CFLAGS)
#编译器
CC=g++
IDIR=标题
SRCDIR=源
ODIR=obj
LIBS=-lncures
CFLAGS=-I$(IDIR)
DE=奶牛.h绵羊.h
DES=$(patsubst%,$(IDIR)/%,$(DE))
_O=牛。O羊。O
OB=$(patsubst%,$(ODIR)/%,$(_O))
全部:制作
/制造
make:$(OB)$(ODIR)/main.o$(DES)
$(CC)-W-Wall-o$@$^$(CFLAGS)$(LIBS)
$(ODIR)/%.o:$(SRCDIR)/%.c$(DES)
$(CC)-W-Wall-c-o$@$<$(CFLAGS)
$(ODIR)/main.o:$(SRCDIR)/main.cpp
$(CC)-c-o$@$<$(CFLAGS)

但是,当我在终端中运行make时,对象文件正在创建,但是在项目目录(保存make文件的地方)中,而不是在obj子目录中。

这个make文件看起来正确。您确定这正是您在测试中使用的生成文件吗?您是否碰巧在make可能正在使用的目录中有第二个makefile,或者当您将makefile翻译成问题时,您是否修改了它?整个过程是否真正起作用,但只是将对象放在本地目录中,还是有错误(如果有,是什么错误)?是的,它起作用了,我从makefile复制了确切的代码。对象是在本地目录中创建的,它所给出的唯一错误是“代码>牛”。O没有在Obj/</代码>中找到。C++和C++源文件都使用了?你能给我们看看Make的输出(它打印的行,而不是它写的文件)吗?我检查了你的Make文件是否正常工作。仅在obj文件夹中创建对象。在…中找不到哪个程序打印了错误
?Make不会打印那个。我根本看不出上面的makefile会导致您描述的行为。您可能会遇到许多类型的问题,但是上面的目标依赖于
ODIR
目录中存在的文件,它根本不会尝试在当前目录中创建文件。您确定没有其他生成文件被使用吗?正如Beta所说,您必须向我们展示运行
make
的输出。顺便说一句,调用程序
make
可能不是一个好主意,而且会导致混乱。