删除后自动重建使用-MMD生成的依赖项文件

时间:2014-01-29 13:51:04

标签: c++ compilation makefile g++

我已经厌倦了等待我们的构建与目标文件分开创建依赖文件,所以我试图在构建.o文件时将我们的构建切换为使用-MMD来生成.d文件。

这很好用,并且将我们的构建时间缩短了一半,但是因为我没有制作.d文件的规则,如果它们不存在则make忽略它们并且不重建目标文件。我们的一个要求是如果依赖文件不存在,我们重建它们,显然我们不喜欢“不删除依赖文件”解决方案。所以,是的,我们正在研究你成功构建基线的情况,然后随意删除依赖文件并且懒得去做一个make clean。

如果.d文件不存在,如何告诉make重建.o文件?当我使.d依赖于.o时,我得到“没有规则来制作目标xyz.d”。

1 个答案:

答案 0 :(得分:1)

我就是这样做的:

EXE := toto
SRC := $(wildcard *.cpp)
DIR := obj
OBJ := $(SRC:%.cpp=$(DIR)/%.o)
DEP := $(OBJ:.o=.d)

CPPFLAGS := -MMD -MP

.PHONY: all clean fclean re

all:    $(EXE)

$(EXE): $(OBJ) $(DEPS)
    $(CXX) $(LDFLAGS) $(OBJ) $(LDLIBS) -o $@

$(DIR)/%.o $(DIR)/%.d: %.cpp | $(DIR)
    $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $*.o -c $<

$(DIR):
    @mkdir $@

-include $(DEPS)

clean:
    @$(RM) -r $(DIR)

fclean: clean
    @$(RM) $(EXE)

re:     fclean all

当我手动删除其中一个.d文件并运行make时,会重建该文件。 唯一的事情是可执行文件也被重建。