Fortranで書かれたプログラムをmake
を使用してコンパイルしようとしています(Makefileがあり、Makefile、私はコマンド$ make target
を入力します。ここで、「target」はシステム固有のターゲット指定であり、myMakefile。ターゲット仕様のさまざまなリビジョンを試すと、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」などのエラーコードの意味のリストを見つける方法を知っていますか。別のウェブサイトで this thread を見つけましたが、返信の意味がわかりません。システムに依存しないmake
エラーコードの意味がないということですか?手伝ってくれませんか?ありがとうございました。
エラーコードはmakeからのものではありません。makeは失敗したコマンドの戻りステータスを報告しています。各ステータス値の意味を理解するには、各コマンドのドキュメントを参照する必要があります。ほとんどのコマンドは、0 =成功、それ以外の場合=失敗以外の区別はありません。
いずれの例でも、./dpp
は実行できません。これが発生すると、それを呼び出そうとしたシェルはステータスコード126で終了します(これは 標準の動作 です)。実行中のmakeのインスタンスが、シェルが失敗したコマンド(シェル)を検出して終了し、Error 126
を表示します。 makeのインスタンス自体は、makeの親インスタンスによって実行されるコマンドであり、make
ユーティリティはエラー時に2を返すため、親makeはError 2
を報告します。
ビルドの失敗は、test: too many arguments
が原因である可能性があります。これは、メイクファイルの構文エラーであるか、bashでない/bin/sh
がある場合にbash固有の機能に依存していることが原因である可能性があります。 make Shell=/bin/bash target
またはmake Shell=/bin/ksh target
を実行してみてください。それが機能しない場合は、メイクファイルを修正する必要があります。
明確にするために、Makeは常に gnu.org に記載されている3つのエラーコードのいずれかを返します。
これをテストするには、上記の例を実行し(2011年から引き続き使用している場合)、ターミナルでecho $?
を実行して前の戻りコードを出力します。
Makeは、発生した他のエラーコード(検出した126など)を出力しますが、エラーが発生した場合は常に2のエラーコードを返します。