Где я могу найти список кодов ошибок make?

26

Я пытаюсь скомпилировать программу, написанную на Фортране, используя make(у меня есть Makefile, и, находясь в каталоге, содержащем Makefile , я набираю команду $ make target, где «target» - это спецификация целевой системы, которая присутствует в моем Makefile . экспериментируя с различными ревизиями моей целевой спецификации, я часто получаю различные сообщения об ошибках при попытке вызова make. Чтобы привести несколько примеров:

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp   angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory
make: *** [cmu60] Error 2

а также

make[1]: Entering directory
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer'-I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpich-c2] Error 2

а также

make[1]: Entering directory 
/bin/sh: line 0: test: too many arguments
./dpp -DSTRESS -DMPI -P -D'pointer=integer' -I/opt/mpich_intel/include  angfrc.f > angfrc.tmp.f
/bin/sh: ./dpp: Permission denied
make[1]: *** [angfrc.o] Error 126
make[1]: Leaving directory 
make: *** [mpi-intel] Error 2

Знаете ли вы, как я могу найти список того, что означают коды ошибок, такие как «Ошибка 126» и «Ошибка 2»? Я нашел эту тему на другом сайте, но я не уверен, что означает ответ. Означает ли это, что нет системно-независимого значения makeкодов ошибок? Не могли бы вы мне помочь? Спасибо.

Эндрю
источник
opussoftware.com/manual/appendices/B1.htm имеет список ...
Уилф

Ответы:

27

Коды ошибок не от make: make сообщает о состоянии возврата команды, которая завершилась неудачно. Вам необходимо просмотреть документацию по каждой команде, чтобы узнать, что означает каждое значение состояния. Большинство команд не беспокоятся о различиях, кроме 0 = успех, что-нибудь еще = сбой.

В каждом из ваших примеров ./dppне может быть выполнено. Когда это происходит, оболочка, которая пыталась вызвать его, выходит с кодом состояния 126 (это стандартное поведение ). Экземпляр make, который запускал эту оболочку, обнаружил сбойную команду (оболочку) и завершил работу, показывая вам Error 126. Этот экземпляр make сам по себе является командой, выполняемой родительским экземпляром make, и makeутилита возвращает 2 в случае ошибки, поэтому родительский объект создает отчеты Error 2.

Ошибка вашей сборки, скорее всего, проистекает из test: too many arguments. Это может быть синтаксической ошибкой в ​​make-файле, или это может быть связано с использованием специфичных для bash функций, когда у вас есть /bin/shне bash. Попробуйте запустить make SHELL=/bin/bash targetили make SHELL=/bin/ksh target; если это не сработает, вам нужно исправить свой make-файл.

Жиль "ТАК - перестань быть злым"
источник
14

Для пояснения, Make всегда возвращает один из трех кодов ошибок, как указано на gnu.org :

  • 0: статус выхода «Успешно»
  • 2: делать ошибки
  • 1: возврат ответа на флаг -q (вопрос), указывающий, что цели требуют обновления

Вы можете проверить это, запустив свои примеры выше (при условии, что они все еще у вас есть с 2011 года), а затем запустив echo $?в терминале, чтобы напечатать предыдущий код возврата.

Make будет распечатывать другие коды ошибок, с которыми он сталкивается (например, те 126, которые вы нашли), но если он сталкивается с ошибкой, он всегда возвращает код ошибки 2.

Тимоти Клиффорд
источник