エラーが発生した場合は Windows コンソールで GNU Make を一時停止する
質問
私が担当しているアプリのインストールの一部では、いくつかの C コード ライブラリがコンパイルされます。これは、GNU Make を使用してコンソールで実行されます。
そのため、インストールの一部として、コンソール ウィンドウが開き、コンパイルとリンク中にメイク ファイル出力ウィズが表示されます。完了すると、コンソール ウィンドウが閉じてインストーラーが続行されます。
コンパイルエラーがない限り、すべて問題ありません。その後、メイク ファイルがバグってしまい、何が起こっているのかを理解する前にコンソール ウィンドウが閉じてしまいます。
したがって、私が実現したいのは、メイクファイルからのエラーが発生した場合に、コンソールが開いたままになるように、「キーを押して続行する」タイプの機能でコンソールウィンドウを一時停止させることです。それ以外の場合は、通常どおり終了してコンソールを閉じます。
GNU Makefile または Make を実行できるバッチ ファイルからこれを行う方法がわかりません。
解決
これでうまくいくはずです:
if not ERRORLEVEL 0 pause
タイプ help if
エラーレベルの使用法の詳細については、DOS を参照してください。
他のヒント
あなたが探しているものは次のとおりです:
if ERRORLEVEL 1 pause
入力すると
HELP IF
次の情報が得られます:エラーレベル番号|最後のプログラムの実行が出口コードを返した場合、真の条件を指定します 以上 指定された番号。
この単純な C プログラムを使用して終了コードを操作します。
#include <stdio.h>
main(int argc, char *argv[]) {
if (argc == 2) {
// return integer of argument 1
return strtol(argv[1], NULL, 10);
}
else {
return 0;
}
}
終了コードをテストできます。 バッチファイル そのようです:
test.exe 0
IF ERRORLEVEL 0 PAUSE
状態: 0 => 0 == TRUE
いつ ERRORLEVEL = 0
, 、ロジックが次のとおりであるため、一時停止が発生します。 >=
または 以上. 。この状態が異常でないことはすぐには明らかではないため、これは重要です。 ==
比較。
に置き換えることに注意してください。 1 => 0
も true となるため、一時停止も発生します。これは、あらゆる正の数に当てはまります。
以下に進むことによってのみ逆の効果を引き起こすことができます 0
:
test.exe -1
IF ERRORLEVEL 0 PAUSE
状態: -1 => 0 == FALSE
以来 ERRORLEVEL
の 1
通常、エラーがあることを意味し、 0
エラーはありません。次のように比較条件の最小値を増やすだけで、必要なものを取得できます。
test.exe 0
IF ERRORLEVEL 1 PAUSE
状態: -1 => 1 == FALSE
状態: 0 => 1 == FALSE
状態: 1 => 1 == TRUE
この例では。スクリプトは次の場合に一時停止します ERRORLEVEL
は 1
以上
これにより、 -1
終了コードは以下と同じ 0
. 。ただ欲しい場合はどうしますか 0
一時停止しないようにするには?別の構文を使用できます。
test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE
状態: -1 != 0 == TRUE
状態: 0 != 0 == FALSE
状態: 1 != 0 == TRUE
この例では、次の場合にスクリプトが一時停止します。 %ERRORLEVEL%
ではありません 0
これを行うには、EQU 演算子を使用して最初に次のことを確認します。 %ERRORLEVEL% EQU 0
, 、次に NOT 演算子を使用すると、逆の効果が得られます。 !=
オペレーター。ただし、これは NT マシンでのみ機能し、単純な DOS では機能しないと思います。
参考文献:
http://chrioldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html
「一時停止」コマンドを試してみましたか?
@echo off
echo hello world
pause
- 「一時停止」の詳細: http://technet.microsoft.com/en-us/library/bb490965.aspx
- DOS コマンド ライン リファレンス A ~ Z : http://technet.microsoft.com/en-us/library/bb490890.aspx