Профилирование Makefile

Итак, у меня есть система сборки на основе Makefile, которая, по мнению моих пользователей, работает слишком медленно. Ради этого вопроса давайте определим производительность как время, которое требуется make, чтобы выяснить, что она должна делать на самом деле.

Я вижу некоторые возможности для оптимизации -

  • Уменьшение количества раз парсинга Makefile и пересчета DAG за счет включения фрагмента Makefile.
  • Уменьшение количества обращений к внешнему Makefile с помощью make -C
  • Сокращение расширений переменных
  • и т.д.

- однако сначала я хочу знать, где мои узкие места. Поскольку оптимизация без профилирования - пустая трата жизни, я хочу спросить: Как профилировать Makefile?

Предположим, что система, которую я унаследовал, достаточно хорошо спроектирована, то есть в ней уже реализованы наиболее распространенные уловки: (в основном) нерекурсивный make, ccache, предварительно скомпилированные заголовки, автоматически генерируемые зависимости заголовков и т. д.)

... и просто для того, чтобы упредить некоторые возможные ответы. Я знаю, что могут быть более быстрые и лучшие системы сборки, чем GNU make - (Лично я с нетерпением жду, что придумают люди из CMake в отношении системы Ninja), но, к сожалению, замена системы сборки невозможна.

19
задан Chen Levy 23 March 2011 в 14:58
поделиться