Это должно работать:
%.d :: %.cpp
$(CPP) -MM $(CPPFLAGS) $<
%.d :: %.cc
$(CPP) -MM $(CPPFLAGS) $<
Другая идея:
%.d : %.c
$(CPP) -MM $(CPPFLAGS) $<
%.c : %.cpp
ln $< $@ # or cp -p
Другая идея состоит в том, чтобы заставить GNU make генерировать два правила шаблона.
Существуют два способа сделать это:
- записывайте их в make-файлы (
%-cc.mk
или аналогичные), которые вы включаете в свой фактический make-файл с помощью оператора include
GNU make
- генерирует и оценивает их в соответствии с функциями GNU make
$(eval)
и $(call)
Как и большинство всего остального в инструментальной цепочке разработки C / Unix, эти методы, по сути, являются формой предварительной обработки, облегчая их понимание за счет того, что они действительно сложны в использовании (множество двойного или тройного побега, действительно трудно сохранить отслеживание того, что расширяется, когда; отладка может быть королевской болью, по крайней мере, по моему опыту).
Так что зарезервируйте их для более сложных случаев использования (из которых Stack Overflow перечисляет несколько).