Когда make печатает «Ошибка 2» в этом контексте, это просто означает, что произошла ошибка в рекурсивном вызове make. Вы должны посмотреть на сообщения об ошибках, предшествующих этому сообщению, чтобы определить реальную проблему в субмаке. Например, для данного файла Makefile:
all:
$(MAKE) -f sub.mk
... и подобный sub.mk:
all:
@exit 1
Когда я запускаю GNU make, он печатает следующее:
gmake -f sub.mk
gmake[1]: Entering directory `/tmp/foo'
gmake[1]: *** [all] Error 1
gmake[1]: Leaving directory `/tmp/foo'
gmake: *** [all] Error 2
Error 2
говорит мне, что в субмаке произошла какая-то ошибка. Я должен посмотреть выше этого сообщения на сообщение Error 1
от самого субмаки. Там я вижу, что некоторые команды, вызываемые при попытке построить all
, завершаются с кодом выхода 1. К сожалению, на самом деле не существует стандарта, определяющего коды выхода для приложений, кроме тривиального «код выхода 0 означает ОК». Вы должны посмотреть на конкретную команду, которая потерпела неудачу, и проверить ее документацию, чтобы определить, что означает конкретный код завершения.
Эти сообщения об ошибках не имеют ничего общего со значениями Unix errno, как утверждали другие. Самая внешняя «2» - это просто код ошибки, который сам присваивается, когда субмаки имеют ошибку; внутренняя «1» - это просто код завершения неудачной команды. С таким же успехом это может быть «7», «11» или «42».