我知道下面的makefile會讓預處理器自動生成依賴項(在.d文件中)並將它們包含在makefile中(因爲我的課程筆記會這麼說),所以他們不必自動維護。 -MMD
標誌是對此負責的。我沒有得到的是:什麼時候生成的.d文件?甚至沒有使用${CXXFLAGS}
的任何命令。據推測,像${CXX} ${CXXFLAGS} -c x.C -o x.o
這樣的命令將被make自動推斷爲每個目標文件,但是如果這些是生成.d文件的命令,我們是不是已經通過了知道xo,yo和zo依賴關係的點如果我們只通過執行生成這些.o文件的命令來了解它們,它們可能是相關的嗎? (說有.h文件,如果留下來推斷其本身或某事規則的生成文件會忽略。)在makefile中使用g ++和-MMD來自動生成依賴關係
CXX = g++ # compiler
CXXFLAGS = -g -Wall -MMD # compiler flags
OBJECTS = x.o y.o z.o # object files forming executable
DEPENDS = ${OBJECTS:.o=.d} # substitutes ".o" with ".d"
EXEC = a.out # executable name
${EXEC} : ${OBJECTS} # link step
${CXX} ${OBJECTS} -o ${EXEC}
-include ${DEPENDS} # copies files x.d, y.d, z.d (if they exist)