我正在使用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”之后,两个目录都为空,没有任何错误。输出文件始终在主目录中创建。如果您能给我建议,一定会感到烦恼。
答案 0 :(得分:0)
此规则:
$(BDIR)/test: test.o print.o
告诉人们要构建$(BDIR)/test
,首先要构建test.o
和print.o
。因此,它确实构建了这两个文件。您已经定义了构建$(ODIR)/%.o
的规则,但是test.o
与模式$(ODIR)/%.o
不匹配,因此未使用该规则。
make会使用其自己的默认内置规则,这些规则知道如何创建%.o
;该模式确实符合您的目标test.o
。
如果要使对象在另一个目录中构建,则在编写规则时必须在其中列出它们:
$(BDIR)/test: $(ODIR)/test.o $(ODIR)/print.o
现在,知道您要在$(ODIR)
目录中构建目标,以便它将使用可以执行此操作的规则。