在Makefile中如何使用.d文件?
tm_wb 2006-08-23 03:49:42 在自动生成依赖关系是要使用.d文件请问怎么使用该文件
-include $(DEPS)
#DEPS是指定的.d文件的变量
当Makefile包含了.d文件之后什么也没做呀,.d文件是怎么起作用的?
如下有一个Makefile
EXECUTABLE := mushroom.exe
LIBS := alleg
CFLAGS := -g -Wall -O3 -m486
CXXFLAGS := $(CFLAGS)
RM-F = rm -f
SOURCE := $(wildcard *.c) $(wildcard *.cc)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \
$(patsubst %.d,%.cc,$(MISSING_DEPS)))
CPPFLAGS += -MD
.PHONY : everything deps objs clean veryclean rebuild
everything : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
@$(RM-F) *.o
@$(RM-F) *.d
veryclean: clean
@$(RM-F) $(EXECUTABLE)
rebuild: veryclean everything
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM-F) $(patsubst %.d,%.o,$@)
endif
-include $(DEPS)
$(EXECUTABLE) : $(OBJS)
gcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
###########################################
deps : $(DEPS)
objs : $(OBJS)
这两句没有任何命令,是不是使用了隐含规则?
-include $(DEPS)
只是把.d文件包含进来,这样它就能起作用吗?
还有如果我想不生成的.o .d文件放到别的文件夹里或者原文件不在当前目录下那上面两句还能好用吗?