エラーが発生した場合は Windows コンソールで GNU Make を一時停止する

StackOverflow https://stackoverflow.com/questions/91263

  •  01-07-2019
  •  | 
  •  

質問

私が担当しているアプリのインストールの一部では、いくつかの 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

以来 ERRORLEVEL1 通常、エラーがあることを意味し、 0 エラーはありません。次のように比較条件の最小値を増やすだけで、必要なものを取得できます。

test.exe 0
IF ERRORLEVEL 1 PAUSE

状態: -1 => 1 == FALSE

状態: 0 => 1 == FALSE

状態: 1 => 1 == TRUE

この例では。スクリプトは次の場合に一時停止します ERRORLEVEL1 以上

これにより、 -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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top