Я думаю, что я видел этот вопрос здесь раньше ...
Вы можете заменить оболочку чем-то, что вызывает оболочку, но время ее выполнения, и записывает результат где-то вместе с целевым именем.Каждая цель будет построена только один раз (или make откажется запускаться), поэтому все, что вам нужно сделать, это сложить время вместе.
Очень грубый пример: замените
make
на
make SHELL='echo $@: && time sh'
Если вы не хотите складывать время вместе, вы также должны каким-то образом объединить команды для каждой цели в одну команду.Один из способов сделать это - предварительно обработать Makefile, но по разным причинам это не сработает ни для кого, кроме простейших Makefile.
Например, попытаться выполнить что-то вроде
perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo $@: && time sh'
это очень грубый удар в этом направлении.
Существуют различные альтернативные подходы, но я думаю, что единственное реальное решение - добавить эту функцию;GNU make написана на очень переносимом языке C, так что это не должно быть очень сложным.