Подтвердить что ты не робот

Измерьте (профиль) время, проведенное в каждой цели Makefile

Есть ли способ повторить эхо (время системы, пользователя, реального), проведенное в каждой цели Makefile, когда я делаю make all?

Я хотел бы сравнить результаты компиляции проекта более подробно, чем просто time make all. В идеале, это будет эхо дерева исполняемой цели, каждая из которых имеет время, затраченное на все его зависимости. Было бы здорово, если бы он работал с -j (parallel make). И, кстати, мой Makefile не рекурсивный (не порождает другого экземпляра make для каждой основной цели).

Спасибо!

4b9b3361

Ответ 1

Gnu Make использует переменную $(SHELL) для выполнения команд в целевых объектах.

По умолчанию он установлен в /bin/sh.

Вы можете установить эту переменную в script, которая выполнит команду, заданную командой "время". Что-то вроде этого:

В вашем файле make укажите переменную SHELL, где-то вверху:

SHELL = ./report_time.sh

и в файле. /report _time.sh:

#!/bin/sh
shift  # get rid of the '-c' supplied by make.
time sh -c "$*"

Замените команду 'sh' на исходный SHELL, указанный в Makefile, если таковой имеется.

Это сообщит о таймингах.

Однако это не скажет вам, какой целевой задачей является report_time.sh script. Одним из решений для этого является добавление целевого имени ($ @) в каждую целевую запись в файле makefile, чтобы оно также передавалось в report_time.sh script.

Ответ 2

римейк --profile является заменой для make. Он генерирует целевое дерево вызовов в формате callgrind.