2008-09-18 75 views
5

我負責編譯一些C代碼庫的應用程序的安裝部分。這是在使用GNU Make的控制檯中完成的。如果發生錯誤,請在Windows控制檯中暫停GNU Make

因此,作爲安裝的一部分,將打開一個控制檯窗口,在完成控制檯窗口關閉並且安裝程序繼續時,您會看到make文件輸出wiz。

一切都很好,除非有編譯錯誤。然後,在你有機會找出發生的事情之前,make文件會出錯並且控制檯窗口關閉。

因此,如果makefile中有錯誤,控制檯保持打開狀態,那麼我希望發生的情況是控制檯窗口會暫停,並按'繼續鍵'鍵入功能。否則,只需正常退出並關閉控制檯即可。

我無法解決如何在GNU Makefile或可以運行Make的批處理文件中執行此操作。

回答

9

這應該做的伎倆:

if not ERRORLEVEL 0 pause 

help if在DOS上ERRORLEVEL使用的詳細信息。

+0

這並沒有爲我工作,因爲如果沒有ERRORLEVEL 0總是返回false作爲ERRORLEVEL總是> = 0。我下面貼一個正確的版本。 – Benja 2011-10-21 13:49:22

2

這是你在找什麼:

if ERRORLEVEL 1 pause 

如果你t YPE

HELP IF 

你得到這個信息:ERRORLEVEL號| 指定一個真實條件,如果最後一次程序運行返回的退出代碼等於或大於指定的數字

0

使用這個簡單的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也是正確的,因此暫停也會發生。對於任何正數都是如此。

我們只能去下面0引發了相反的效果:

test.exe -1 
IF ERRORLEVEL 0 PAUSE 

條件-1 => 0 == FALSE

由於1ERRORLEVEL通常意味着有一個錯誤,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://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html