【问题标题】:Why makefile is not saving output files to different directory?为什么makefile没有将输出文件保存到不同的目录?
【发布时间】:2019-09-20 06:34:44
【问题描述】:

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

【问题讨论】:

    标签: makefile g++ gnu-make


    【解决方案1】:

    这条规则:

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

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

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

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

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

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

    【讨论】:

    • 谢谢。这真的很有帮助,我能够解决这个问题。
    猜你喜欢
    • 2013-03-10
    • 2018-02-02
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多