2012-03-15 7 views
0

У меня есть Makefile, который компилируется, но я хочу изменить имя одного из каталогов с «release» на «объекты». Это оригинальный Makefile -Ошибки Makefile при изменении имени каталога

# This makefile compiles .... 

INCLUDE = -I/usr/include/X11 -I/usr/local/include -I/usr/local/include/FL/images -I/usr/include/freetype2 

CC=g++ 
CFLAGS=-w -D LINUX -O3 -fpermissive 
OBJDIR=release # HERE IS THE DIRECTORY I WANT TO CHANGE 
SRCDIR=src 

LDFLAGS= -L/usr/X11R6/lib$(LIBSELECT) -lpthread -lfltk -lXext -lXft -lfontconfig -lXinerama -lpthread -ldl -lm -lX11 

SOURCES_RAW= robot_driver_agent.cpp robot_driver_position.cpp robot_driver_priorityqueue.cpp main.cpp robot_driver_tree.cpp robot_driver_stack.cpp robot_driver_grid.cpp robot_driver_path.cpp grid_analyzer.cpp tcpserver.cpp tcpclient.cpp servercontrol.cpp clientcontrol.cpp robot.cpp udpserver.cpp udpclient.cpp owncontrol.cpp guiwindow.cpp rs232.cpp 

TARGET:= go 
TARGETD:= go_d 

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

SOURCES:=$(SOURCES_RAW) 
SOURCES:=$(patsubst %.cpp, $(SRCDIR)/%.cpp, $(SOURCES)) 

all: $(TARGET) 

$(TARGET): $(OBJECTS) 
    $(CC) -w -D LINUX $(INCLUDE) $^ -o [email protected] $(LDFLAGS) 

release/%.o: src/%.cpp 
    test -d $(OBJDIR) || mkdir $(OBJDIR) 
    $(CC) -g -c $< $(CFLAGS) -o [email protected] 

debug: $(TARGETD) 

$(TARGETD): $(OBJECTS) 
    $(CC) -w -D LINUX $(INCLUDE) $^ -o [email protected] $(LDFLAGS) 

%.o: $(SRCDIR)/%.cpp 
    $(CC) -c -g $< $(CFLAGS)-o [email protected] 



.PHONY : clean 
clean: 
    rm -f $(OBJDIR)/*.o 
    rm -f $(TARGET) $(TARGETD) 

Все, что я сделать, это изменить символ OBJDIR на «объекты», так было бы просто -

OBJDIR=objects 

Но когда я делаю это, я получаю ошибку -

make: *** No rule to make target `objects/robot_driver_agent.o', needed by `go'. 

Что мне не хватает? Является ли «объектами» слово зарезервированное для чего-то, поэтому я не могу использовать его для каталогов? Это что-то в файле make, который мне нужно изменить? Честно говоря, я не очень много знаю о make-файлах, поэтому любая помощь вообще была бы замечательной. Благодарю.

ответ

0

У вас есть правило:

release/%.o: src/%.cpp 
    ... 

Так что, когда OBJDIR=release и сделать хочет построить release/robot_driver_agent.o, он знает, что делать. Затем вы пытаетесь выполнить OBJDIR=objects, он хочет построить objects/robot_driver_agent.o, и он не знает, как из-за отсутствия правила. Попробуйте изменить правило:

$(OBJDIR)/%.o: src/%.cpp 
    ... 
+0

Ах, конечно! Благодаря! – Sterling

Смежные вопросы