次のmakefileは、プリプロセッサが(.dファイルで)依存関係を自動的に生成し、それらをmakefileに含める(私のコースノートにそう書かれているため)ので、自動的に維持する必要がないことを知っています。旗はこれ-MMD
に責任があるものです。私が得られないのは:どの時点で.dファイルが生成されますか?使用されるコマンドすらありません${CXXFLAGS}
。おそらく、次のようなコマンド${CXX} ${CXXFLAGS} -c x.C -o x.o
各オブジェクトファイルのmakeによって自動的に推定されますが、これらが.dファイルを生成するコマンドである場合、xo、yo、およびzoの依存関係を知ることが関連している可能性があるポイントをすでに通過していません。 、これらの.oファイルを生成するコマンドを実行することによってのみそれらを知っている場合はどうなりますか?(それ自体または何かでルールを推測するために残された場合、makefileが無視する.hファイルがあるとしましょう。)
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)