CXX = g++
OBJECTS := main.o C1.o C2.o
all: $(OBJECTS)
%.o : %.cpp
$(CXX) $(CPPFLAGS) -Wall -MMD -c $< -o $@
-include *.d
Run Code Online (Sandbox Code Playgroud)
编辑:正如TobySpeight所指出的,如果你构建一个目标文件,重命名或删除一个必备的源文件或头文件,然后尝试重建目标文件,这将不起作用; 该.d文件仍然需要丢失的文件,并且构建将失败.我忽略了包括处理这种情况的线条:
%.h: ;
%.cpp: ;
Run Code Online (Sandbox Code Playgroud)
(这很有效,但很粗糙.更精确的方法是在%.o规则中放入一些sed命令,以便为.d文件添加特定的空规则,每个先决条件一个,但是sed命令很难看,上面的方法是对几乎所有情况都足够好.)