парсинг многопоточного вывода make (-j N) - PullRequest
3 голосов
/ 24 декабря 2010

У меня много исходных каталогов в общем каталоге.Когда я запускаю make с помощью команды:

make -j 4

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

make -j 1

, чтобы я мог правильно проанализировать вывод make.правильно решить, какая ошибка связана с каким проектом (исходным каталогом)?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 24 декабря 2010

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

$ cat M
#!/bin/bash
PREFIX=$$:
exec -a $0 make "$@" 2>&1 | sed "s/^/$PREFIX/"

Теперь, предполагая, что ваши make-файлы правильно используют ${MAKE} для обозначения рекурсии, мы можем использовать ./M вместо make.

$ ./M -j --no-print-directory target
28720:/home/user/M -fa.mak
28720:/home/user/M -fb.mak
28720:/home/user/M -fc.mak
28720:/home/user/M -fd.mak
28720:/home/user/M -fe.mak
28720:32484:gcc blah...
28720:31936:/home/user/M -fanother.mak
28720:32484:gcc blah...
28720:31936:gcc blah...
28720:31936:gcc blah...
28720:31936:56781:echo blah...
∶

В этом случае каждая строка имеет префикс со спискомидентификаторы процессов (хороши для отладки рекурсивного make).В вашем случае вы можете предпочесть M искажать имена исходных файлов, чтобы они стали абсолютными путями в сообщениях об ошибках.

1 голос
/ 20 сентября 2012

Если вы используете какую-либо систему мета-сборки (например, CMake), попробуйте использовать Ninja для фактического запуска сборки.

Это решает эту проблему, а также намного быстрее.

1 голос
/ 21 января 2011

Может быть, можно перейти на pmake?

PMake настроен для корректной обработки выходных данных из нескольких заданий ( source )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...