2013-09-25 2 views
1

Здесь (часть) мой makefile:марка: *** [чистый] Ошибка 64 Ошибка в 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

Значение SOURCES - это пустая строка. Таким образом, ОБЪЕКТЫ также пусты. Вы уверены, что в вашем текущем каталоге есть файлы, соответствующие '* .cpp'? – MadScientist

+0

Сделайте «эхо» ОБЪЕКТЫ: «$ (ОБЪЕКТЫ)» вместо 'rm' – cnicutar

+0

Выполнение эха не требуется. Сделайте отпечатанное значение, которое он видит: 'rm', и там ничего нет. – MadScientist

ответ

2

Если исходные файлы находятся в каталоге ../source, то вы должны найти их там, как это:

SRCDIR = ../source 

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

(мы используем := вместо = здесь немного эффективности, см ГНУ сделать руководство). Теперь, если вы хотите поместить ваши объектные файлы где-то еще нужно, чтобы преобразовать $(SRCDIR)/foo.cpp в $(OBJDIR)/foo.o, так что-то вроде этого:

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

Теперь вы должны сказать сделать, как построить объект в одном каталоге из исходного файла в другой каталог; встроенные правила make знают, как построить объект в текущем каталоге из исходного файла в том же каталоге (или найти через VPATH, о котором мы здесь не будем говорить). Это дает что-то вроде этого:

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

(это использование делают встроенные переменные, которые используются в встроенных в правилах).

+0

Я хотел перевернуть это, но вместо этого нажал неправильную кнопку и не заметил до пяти часов. :(Теперь я не могу исправить это до тех пор, пока не будет отредактирован ответ, помогите (также, спасибо: D) – Alhadis

+1

Ха! Я сделал простое редактирование. – MadScientist

+0

Спасибо! Не знаю, как я получил это неправильно, кнопки freakin ' даже если близко вместе ... :( – Alhadis