我想把它该到放到obj和dep文件夹下,怎么改。那位有经验告诉我以下。
makefile如下
代码: 全选
# 用户自定义的地方 #
PROG := proj #生成程序名
LIBS := `sdl-config --libs` -lSDL_image -lSDL_ttf -lSDL_mixer #需要的库文件
CFLAGS := `sdl-config --cflags` -I/usr/include/SDL -g -D_DEBUG #编译器参数,包括加入头文件目录
CXXFLAGS := $(CFLAGS)
CC := g++
CXX := g++
srcdir = *.cpp src/*.cpp src/basic/*.cpp #这个地方需要手动加目录
# 准备给下列规则的参数 #
#(变量用函数赋值,才能展开*.c,但如果是依赖关系,直接在:后写通配符*.c就可以展开。其他有*, ? 和 [...])
VPATH = src:src/basic #这个地方需要自己手动加目录(那位高人给该以下,可以使用上面的srcdir变量直接生成这)
SOURCE := $(wildcard $(srcdir)) #源文件
objs := $(patsubst %.cpp, %.o, $(SOURCE)) #目标文件
OBJS := $(notdir $(objs))
#OBJS := $(addprefix obj/,$(notdir $(objs)))
L_LIBS := $(LIBS) #对库名加-l前缀
DEPS := $(patsubst %.o, %.d, $(OBJS)) #.d文件
#DEPS := $(patsubst %.o, %.d, $(notdir $(OBJS)))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)), $(DEPS)) #得到缺少的.d文件,这由于自己不小心删除了一个.d
CPPFLAGS += -MD #这样在.c->.o时,会生成.d文件
.PHONY: all
all:$(PROG)
# 就一条规则,而其他的都采用隐式规则 #
$(PROG): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(L_LIBS)
# 当.c有,而.d没有时,这里就会起作用
ifneq ($(MISSING_DEPS), )
$(MISSING_DEPS):
rm -rf $(patsubst %.d, %.o, $@)
endif
# 把各个.o的依赖导入(看看各个.d文件就知道导入的是啥,就是规则格式。这里的$(DEPS)文件是预处理器生成的)
-include $(DEPS)
# 两个假象目的,都属于每次都想让它执行的,所以加入.PHONY #
.PHONY: clean rebuild
clean:
rm -rf $(OBJS) $(DEPS) $(PROG)
rebuild: clean $(PROG)