我有一个编译的Makefile,但我想将其中一个目录的名称从“release”更改为“objects”。这是原始的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 $@ $(LDFLAGS)
release/%.o: src/%.cpp
test -d $(OBJDIR) || mkdir $(OBJDIR)
$(CC) -g -c $< $(CFLAGS) -o $@
debug: $(TARGETD)
$(TARGETD): $(OBJECTS)
$(CC) -w -D LINUX $(INCLUDE) $^ -o $@ $(LDFLAGS)
%.o: $(SRCDIR)/%.cpp
$(CC) -c -g $< $(CFLAGS)-o $@
.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文件中的内容?老实说,我对makefile知之甚少,所以任何帮助都会很棒。感谢。
答案 0 :(得分:0)
你有一条规则:
release/%.o: src/%.cpp
...
因此,当OBJDIR=release
和Make想要构建release/robot_driver_agent.o
时,它知道该做什么。然后你尝试OBJDIR=objects
,它想要构建objects/robot_driver_agent.o
,它不知道如何,因为没有适合的规则。尝试将规则更改为:
$(OBJDIR)/%.o: src/%.cpp
...