Я знаю, что следующий make файл будет иметь предварительный процессор, автоматически генерирующий зависимости (в .d файлах) и включающий их в make файл (потому что мои комментарии курса говорят так), так что их не нужно автоматически поддерживать. Флаг -MMD
отвечает за это. Я не получаю: В какой момент генерируются файлы .d? Нет никакой команды, в которой используется ${CXXFLAGS}
. Предположительно, команды типа ${CXX} ${CXXFLAGS} -c x.C -o x.o
будут автоматически выведены make для каждого из объектных файлов, но если это команды, которые генерируют файлы .d, мы бы уже не прошли точку, где зная зависимости xo, yo и zo может быть актуальным, если мы знаем только их, выполняя команды, которые генерируют эти .o файлы? (Скажем, есть файлы .h, которые makefile игнорирует, если оставить их самостоятельно или что-то.)
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)