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