我已经厌倦了等待我们的构建与目标文件分开创建依赖文件,所以我试图在构建.o文件时将我们的构建切换为使用-MMD来生成.d文件。
这很好用,并且将我们的构建时间缩短了一半,但是因为我没有制作.d文件的规则,如果它们不存在则make忽略它们并且不重建目标文件。我们的一个要求是如果依赖文件不存在,我们重建它们,显然我们不喜欢“不删除依赖文件”解决方案。所以,是的,我们正在研究你成功构建基线的情况,然后随意删除依赖文件并且懒得去做一个make clean。
如果.d文件不存在,如何告诉make重建.o文件?当我使.d依赖于.o时,我得到“没有规则来制作目标xyz.d”。
答案 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
时,会重建该文件。
唯一的事情是可执行文件也被重建。