为什么makefile没有将输出文件保存到不同的目录?

问题描述 投票:0回答:1

我正在使用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都是空的,没有任何错误。输出文件始终在主目录中创建。如果你可以给我一个建议,那会很高兴。

makefile g++ gnu-make
1个回答
0
投票

这条规则:

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

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

而是使用自己的默认内置规则,知道如何创建%.o;该模式与您的目标test.o相匹配。

如果你想让make在另一个目录中构建对象,你必须在编写规则时将它们列在那里:

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

现在,make知道你想在$(ODIR)目录中构建目标,所以它将使用一个可以这样做的规则。

© www.soinside.com 2019 - 2024. All rights reserved.