При использовании make -j
для файла с множеством целей, и одна из них не работает, может быть немного сложно определить конкретную команду, которая вызвала ошибку.Особенно, когда на выходе много.
Могу ли я убедить gnu make напечатать что-то вроде этого (желательно в конце вывода):
This particular command failed: "frobniz -foo" with output "frobniz only takes -foo options on a thursday"?
Сейчас я прибегаю к использованию make -j -Otarget
внутри tmux с его историей поиска, так что я могу найти этот «неудачный» вывод:
Makefile:41: recipe for target 't4' failed
Увы, цель 't4' имеет около 40 команд с большим количеством выходных данных, поэтому мне нужно больше искать вДля того, чтобы найти фактическую команду, которая терпит неудачу.Это управляемо, но неуклюже.Я тоже пробовал remake
, но, похоже, у него нет вариантов для этого.
РЕДАКТИРОВАТЬ: Очевидно, я должен был поместить здесь некоторый код, позвольте мне изменить это;Это одна цель из 16, в каждой по 40 команд.Пример ниже был обрезан до 4 команд.
t4:
sso -dump FAIL:B -path /instadm-bin/ktkopdat.start -ttarget "AA" ht1
sso -dump FAIL:B -path /instadm-bin/ktknyadm -ttarget "BB" ht1
sso -dump FAIL:B -path /instadm-bin/multiadm -ttarget "CC" ht1
sso -dump FAIL:B -path /instadm-bin/ktkslet.start -ttarge "DD" ht1
Допустим, я выполнил make -j
, и вторая строка выше не выполнена.Ошибка и команда видны в выходных данных make, но смешаны с множеством других выходных данных.
Что make выполняет для генерации ошибки: sso -dump FAIL:B -path /instadm-bin/ktknyadm -ttarget "BB" ht1
- сбой со статусом -1.
Теперь make должен знать, какая команда завершилась неудачей, поскольку он может прервать процесс на этом этапе.Эта информация очень ценна для меня, но, тем не менее, она скрыта в беспорядке результатов множества параллельных процессов.Обратите внимание, что я, конечно, мог бы перезапустить make без опции -j
, что обеспечило бы отображение необходимой информации в нижней части вывода, но я бы предпочел не повторять длинную сборку больше, чем необходимо.