的目标是指定一个构建目录中的.o和可执行将驻留建设项目减少makefile文件
目前我写这个Makefile执行此之后,但我必须指定手动为每个目标文件的目录。
PROGNAME = parkingLotApp
CXX = g++
SRC = main.cpp \
parking_car.cpp \
parking_lot.cpp \
shader.cpp \
shader_manager.cpp
OBJS = main.o \
parking_car.o \
parking_lot.o \
shader.o \
shader_manager.o \
BUILDIR = build
CXXFLAGS = -Wall -c -std=c++11
LDFLAGS = -Wall
LIBS = -lGL -lGLEW -lglfw
$(PROGNAME): $(OBJS)
$(CXX) $(BUILDIR)/*.o $(LDFLAGS) $(LIBS) -o $(BUILDIR)/$(PROGNAME)
main.o:
$(CXX) $(CXXFLAGS) $(INCDIR) main.cpp -o $(BUILDIR)/main.o
parking_car.o:
$(CXX) $(CXXFLAGS) $(INCDIR) parking_car.cpp -o $(BUILDIR)/parking_car.o
parking_lot.o:
$(CXX) $(CXXFLAGS) $(INCDIR) parking_lot.cpp -o $(BUILDIR)/parking_lot.o
shader.o:
$(CXX) $(CXXFLAGS) $(INCDIR) shader.cpp -o $(BUILDIR)/shader.o
shader_manager.o:
$(CXX) $(CXXFLAGS) $(INCDIR) shader_manager.cpp -o $(BUILDIR)/shader_manager.o
.PHONY: clean
clean:
rm $(BUILDIR)/*.o $(BUILDIR)/$(PROGNAME)
同样,这个工程,我预期,但我想摆脱手动指定目录($(BUILDIR)/someobject.o)每个.o文件将
我试过的,而不是重复的线路,这上述
$(OBJS):
$(CXX) $(CXXFLAGS) $(INCDIR) $(SRC) -o $(patsubst %, $(BUILDIR)/%, $(OBJS))
,但它给了一个错误的所有构建/ *。Ø
说
没有这样的文件或目录
为什么它不工作?
首先感谢您的帮助。 ..但是当我做$(BUILDIR)/main.o时,它不会将输出对象放在build目录中(而是用.cpp文件代替),而如果没有它,为什么它会这样呢?我必须得到所有的。o并且可以在同一个目录中执行 – ampawd
@ampawd:我犯了一个小错误(写'BUILDDIR'而不是你的'BUILDIR')和一个主要错误(忘记更正'PROGNAME'规则,我会编辑它,如果它仍然没有没有工作,让我知道,我们会一步一步通过它。 – Beta