我正在使用makefile,我有这个问题 - 它没有将输出文件保存到不同的目录。
CC = g++
CFLAGS = -c -Wall
ODIR = obj
BDIR = bin
$(BDIR)/test: test.o print.o
$(CC) test.o print.o -o test
$(ODIR)/%.o: %.cpp %.h
$(CC) $(CFLAGS) $< -o $@
.PHONY : clean
clean:
rm -f $(ODIR)/*.o $(BDIR)/test
即使我手动创建这些目录,它也无法按预期工作。 “make”后两个dirs都是空的,没有任何错误。输出文件始终在主目录中创建。如果你可以给我一个建议,那会很高兴。
这条规则:
$(BDIR)/test: test.o print.o
告诉要建立$(BDIR)/test
它首先需要建立test.o
和print.o
。所以,它确实构建了这两个文件。您已经定义了构建$(ODIR)/%.o
的规则,但test.o
与模式$(ODIR)/%.o
不匹配,因此不使用规则。
而是使用自己的默认内置规则,知道如何创建%.o
;该模式与您的目标test.o
相匹配。
如果你想让make在另一个目录中构建对象,你必须在编写规则时将它们列在那里:
$(BDIR)/test: $(ODIR)/test.o $(ODIR)/print.o
现在,make知道你想在$(ODIR)
目录中构建目标,所以它将使用一个可以这样做的规则。