Я пытаюсь скомпилировать программу, написанную на Фортране, используя 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
кодов ошибок? Не могли бы вы мне помочь? Спасибо.
make
error-handling
gnu-make
Эндрю
источник
источник
Ответы:
Коды ошибок не от 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-файл.источник
Для пояснения, Make всегда возвращает один из трех кодов ошибок, как указано на gnu.org :
Вы можете проверить это, запустив свои примеры выше (при условии, что они все еще у вас есть с 2011 года), а затем запустив
echo $?
в терминале, чтобы напечатать предыдущий код возврата.Make будет распечатывать другие коды ошибок, с которыми он сталкивается (например, те 126, которые вы нашли), но если он сталкивается с ошибкой, он всегда возвращает код ошибки 2.
источник