Важно отметить, что -M
- это не волшебная палочка для зависимостей, во многих случаях вам нужно будет указывать определенные заголовки, чтобы все вещи перестраивались соответствующим образом, если они меняются.На самом деле, наиболее распространенная проблема с разрешением gcc обрабатывать зависимости - это вещи, которые не нужно пересобирать, что должно быть (в основном, в зависимости от версии GCC, используемой тем, кто запускает make
).
При этом,Я не вижу ничего явно неправильного в том, что вы делаете.
То, что я рекомендую сделать, - это устранить хитрости оболочки, поскольку довольно легко точно указать, что вы хотите.Например,
foo_SOURCES = \
src/foo.cpp \
src/bar.cpp
foo_OBJECTS = $(foo_SOURCES:.cpp=.o)
foo_DEPS = $(foo_OBJECTS:.o=.d)
%.o : %.cpp
$(CC) $(CFLAGS) ... $< -o $@
$(CC) -M $< > $(@.o=.d)
# lots more rules and targets here
# and finally, at the bottom:
-include $(foo_DEPS)
Это в верхней части моей головы в мета-форме, поэтому проверьте это, чтобы быть уверенным.Я полагаю, что ваша проблема на самом деле в том, что зависимости не включены, но я не вижу ничего явно неправильного в том, как вы используете pathsubst
.
Как отмечали в комментариях, запуск make с отладкой может привести кбыло бы полезно, но хорошим первым шагом было бы указать ваши объекты и зависимости, не обращаясь к оболочке.
Если вы работаете, попробуйте просто сохранить результаты ваших вызовов оболочки и отобразить их на экране.Это намного менее шумно, чем вывод отладки make.