Итак, у меня есть встроенная система сборки на основе Makefile, которая, по мнению моих пользователей, работает слишком медленно. Ради этого вопроса давайте определим производительность как время, необходимое для выяснения того, что она должна делать.
Я вижу некоторые возможности для оптимизации -
- Уменьшение количества раз, когда Makefile анализируется, и DAG пересчитывается из-за включения фрагмента Makefile.
- Уменьшение количества переходов во внешний Makefile с помощью
make -C
- Уменьшение разложений переменных
- и др.
- однако я хочу сначала знать, где мои узкие места. Поскольку оптимизация без профилирования является пустой тратой жизни, я хочу спросить: Как профилировать Makefile?
Предположим, что унаследованная система достаточно хорошо разработана, то есть она уже реализует наиболее распространенные трюки в торговле: (в основном) нерекурсивный make, ccache, предварительно скомпилированные заголовки, автоматически сгенерированные зависимости заголовков и т.д.).
... и просто для того, чтобы упредить часть возможного ответа. Я знаю, что могут быть более быстрые и лучшие системы сборки, чем GNU make - (Лично я с нетерпением жду, чтобы увидеть, что люди CMake придумают в отношении системы ниндзя) - но, к сожалению, система смены сборки не находится в карточках.