make:*** [clean] makefile中的64错误

时间:2013-09-25 21:34:53

标签: bash makefile

以下是makefile的一部分:

OBJDIR   = ../../../build_project/obj                                           
BINDIR   = ../../../build_project/bin                                           

SOURCES = $(wildcard *.cpp)                                                     
OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o))                           
TARGET   = $(BINDIR)/project                                                    


.PHONY: clean distclean                                                         

clean:                                                                          
    rm $(OBJECTS)  

当我运行make clean时,这是我得到的输出:

rm 
usage: rm [-f | -i] [-dPRrvW] file ...
       unlink file
make: *** [clean] Error 64

我不知道该怎么做这个错误。我格式化OBJECTS错了吗?

1 个答案:

答案 0 :(得分:2)

如果您的源文件位于../source目录中,那么您必须在那里找到它们,如下所示:

SRCDIR = ../source

SOURCES := $(wildcard $(SRCDIR)/*.cpp)

(我们在这里使用:=而不是=来提高效率;请参阅GNU make手册。现在,如果您想将对象文件放在其他位置,则需要将$(SRCDIR)/foo.cpp转换为$(OBJDIR)/foo.o,如下所示:

OBJECTS := $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SOURCES))

现在你必须告诉make如何在一个目录中从另一个目录中的源文件构建一个对象;内置的make规则只知道如何在同一目录中的源文件中构建当前目录中的对象(或通过VPATH找到,我们在此不再讨论)。这给出了这样的东西:

$(OBJDIR)/%.o : $(SRCDIR)/%.cpp
        $(COMPILE.cpp) $(OUTPUT_OPTION) $<

(这是使用内置规则中使用的make的内置变量)。