2015-01-12 3 views
2

У меня есть большой проект, который построен с использованием make. Из-за размера проекта и способа организации зависимостей существует реальная выгода при параллельном построении с использованием make -j. Однако вывод (то есть сообщения журналов и ошибок), который производит make -j, все перемешано, потому что все параллельные задачи записываются в stdout одновременно.Как заставить make -j производить хороший вывод?

Как я могу сообщить make, чтобы организовать выход красиво? В идеале я бы хотел, чтобы он буферизовал журналы из каждой задачи отдельно, а затем выводил их по порядку по мере их завершения. Есть ли какой-либо стандартный способ сделать это?

ответ

3

Вы можете использовать -O или --output-sync параметры командной строки:

[Тип] --output синхронизации [= тип]

При выполнении нескольких заданий параллельно с -j, обеспечить, чтобы выход каждого задания собирался вместе, а не перемежался с выходом из других заданий. Если тип не указан или является целевым, то вывод из всего рецепта для каждой цели группируется вместе. Если тип - строка, то вывод из каждой командной строки в рецепте группируется вместе. Если тип рекурсивный вывод из всего рекурсивного make сгруппирован вместе. Если тип отсутствует, синхронизация вывода отключена.

The online manual имеет больше информации.

(Обратите внимание, что вам нужно GNU Make 4.0 для этой работы.)

+0

Примечание вы должны использовать GNU сделать 4.0 или выше для '-O' поддержки. Он не доступен в GNU make 3.x. – MadScientist

+0

@MadScientist: Спасибо! Добавлен к моему ответу. – Job

Смежные вопросы