Де я можу знайти список кодів помилок "зробити"?


26

Я намагаюся скласти програму, написану у Fortran, використовуючи 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

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

У кожному з ваших прикладів ./dppнеможливо виконати. Коли це трапляється, оболонка, яка намагалася викликати його, закривається кодом статусу 126 (це стандартна поведінка ). Екземпляр make, який працював, що оболонка виявляє невдалу команду (оболонку) і виходить, показуючи вам Error 126. Цей екземпляр make - це сама команда, що виконується батьківським екземпляром make, і makeутиліта повертає 2 помилки, тому батько робить звіти Error 2.

Невдача вашої збірки, ймовірно, буде наслідком test: too many arguments. Це може бути синтаксичною помилкою в makefile, або це може бути пов’язано з посиланням на особливості bash, коли у вас /bin/shє не bash. Спробуйте запустити make SHELL=/bin/bash targetабо make SHELL=/bin/ksh target; якщо це не працює, вам потрібно виправити файл makefile.


14

Для уточнення, Make завжди повертає один з трьох кодів помилок, як зазначено на gnu.org :

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

Ви можете перевірити це, запустивши приклади вище (припустимо, що у вас все ще є з 2011 року), а потім запустіть echo $?у терміналі для друку попереднього коду повернення.

Make надрукує інші коди помилок (наприклад, 126, які ви знайшли), але якщо вона виявиться помилкою, вона завжди поверне код помилки 2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.