Fortran言語を使用してプログラムを作成しようとしていますmake
。ファイルの生成そして、以下を含むディレクトリからファイルの生成$ make target
、 "target"は、私のシステムに存在するシステム固有のターゲット仕様であるコマンドを入力します。ファイルの生成。ターゲット仕様のさまざまなリビジョンを試したときにいくつかの例を呼び出そうとしました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
?助けてください?ありがとうございます。
答え1
エラーコードはmakeからのものではありません。 make が失敗したコマンドの戻り状態を報告します。各ステータス値の意味を理解するには、各コマンドのドキュメントを確認する必要があります。ほとんどのコマンドは、0 =成功、他のすべては=失敗を除いて、違いを気にしません。
各例では、./dpp
実行が失敗します。これが発生すると、それを呼び出そうとするシェルはステータスコード126で終了します(これは標準行動)。シェルが実行されているmakeインスタンスは失敗したコマンド(シェル)を検出して終了し、Error 126
makeインスタンス自体がmakeの親インスタンスによって実行されるコマンドであり、make
ユーティリティはエラー時に2を返すため、親makeが報告しますError 2
。
ビルドの失敗は、makefileの構文エラーである可能性があり、test: too many arguments
ファイルがbashではない場合に/bin/sh
bash固有の機能に依存するためです。実行してみてくださいmake SHELL=/bin/bash target
。make SHELL=/bin/ksh target
それでも機能しない場合は、makefileを変更する必要があります。
答え2
明確にするために、Makeは常に次の3つのエラーコードのいずれかを返します。gnu.org:
- 0:終了ステータスが「成功」です。
- 2: make で発生したエラー
- 1:ターゲットを更新する必要があることを示す-q(質問)フラグへの応答を返します。
上記の例を実行し(まだ2011の例があると仮定して)、echo $?
端末で実行して前の戻りコードを印刷してそれをテストできます。
Makeは見つかった他のエラーコード(たとえば、見つかった126)を印刷しますが、エラーが発生した場合は常にエラーコード2を返します。