it-swarm-ru.tech

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

Я пытаюсь скомпилировать программу, написанную на Фортране, используя 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 отсутствует? Не могли бы вы мне помочь? Спасибо.

27
Andrew

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

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

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

28
Gilles 'SO- stop being evil'

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

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

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

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

15
Timothy Clifford