Если вы используете рекурсивный 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
искажать имена исходных файлов, чтобы они стали абсолютными путями в сообщениях об ошибках.