为什么makefile没有将输出文件保存到其他目录?

时间:2019-05-01 18:02:26

标签: makefile g++ gnu-make

我正在使用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”之后,两个目录都为空,没有任何错误。输出文件始终在主目录中创建。如果您能给我建议,一定会感到烦恼。

1 个答案:

答案 0 :(得分:0)

此规则:

$(BDIR)/test: test.o print.o

告诉人们要构建$(BDIR)/test,首先要构建test.oprint.o。因此,它确实构建了这两个文件。您已经定义了构建$(ODIR)/%.o的规则,但是test.o与模式$(ODIR)/%.o不匹配,因此未使用该规则。

make会使用其自己的默认内置规则,这些规则知道如何创建%.o;该模式确实符合您的目标test.o

如果要使对象在另一个目录中构建,则在编写规则时必须在其中列出它们:

$(BDIR)/test: $(ODIR)/test.o $(ODIR)/print.o

现在,知道您要在$(ODIR)目录中构建目标,以便它将使用可以执行此操作的规则。