Pause GNU Make in una console di Windows se si verifica un errore
Domanda
Parte dell'installazione di un'app non sono responsabile, compila C, librerie di codice.Questo viene fatto in una console usando GNU Make.
Così, come parte dell'installazione, una finestra di console non si apre, è vedere il file di output wiz da come si compila e collega, al termine, la finestra di console, e chiude il programma di installazione continua.
Tutto bene, se non c'è un errore di compilazione.Poi il make file di bug e la finestra di console si chiude prima di avere la possibilità di capire cosa sta succedendo.
Così, quello che mi piacerebbe capitare è avere la finestra di console di pausa con un 'premere un tasto per continuare" tipo di funzionalità, se c'è un errore dal makefile in modo che la console rimane aperto.In caso contrario, solo uscita, come normale, e chiudere la console.
Non riesco a capire come fare questo in un Makefile di GNU o da un file batch che può eseguire il Fare.
Soluzione
questo dovrebbe fare il trucco:
if not ERRORLEVEL 0 pause
tipo help if
in DOS per maggiori informazioni su errorlevel di utilizzo.
Altri suggerimenti
Questo è quello che stai cercando:
if ERRORLEVEL 1 pause
Se si digita
HELP IF
prendi questa info:Numero ERRORLEVEL | Specifica una condizione vera se l'ultimo programma eseguito ha restituito un codice di uscita uguale o superiore a il numero specificato.
Utilizzando questo semplice programma in C per manipolare il codice di uscita:
#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;
}
}
Siamo in grado di testare il codice di uscita in un file batch in questo modo:
test.exe 0
IF ERRORLEVEL 0 PAUSE
Condizione: 0 => 0 == TRUE
Quando ERRORLEVEL = 0
, la pausa si verifica perché la logica è >=
o maggiore o uguale.Questo è importante, in quanto non è immediatamente chiaro che la condizione non è un ==
confronto.
Si noti che subsituting per 1 => 0
sarà anche vero, e quindi la pausa verificarsi pure.Questo è vero per qualsiasi numero positivo.
Siamo in grado di innescare l'effetto opposto solo andando sotto 0
:
test.exe -1
IF ERRORLEVEL 0 PAUSE
Condizione: -1 => 0 == FALSE
Dal momento che un ERRORLEVEL
di 1
in genere significa che c'è un errore, e 0
nessun errore, si può solo aumentare il minimo in condizione di confronto per ottenere ciò che vogliamo in questo modo:
test.exe 0
IF ERRORLEVEL 1 PAUSE
Condizione: -1 => 1 == FALSE
Condizione: 0 => 1 == FALSE
Condizione: 1 => 1 == TRUE
In questo esempio.lo script per mettere in pausa quando ERRORLEVEL
è 1
o superiore
Si noti che questo permette -1
codici di uscita lo stesso 0
.Che cosa succede se uno vuole solo 0
per non mettere in pausa?Siamo in grado di utilizzare una diversa sintassi:
test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE
Condizione: -1 != 0 == TRUE
Condizione: 0 != 0 == FALSE
Condizione: 1 != 0 == TRUE
In questo esempio, lo script si interrompe se %ERRORLEVEL%
non è 0
Siamo in grado di eseguire questa operazione utilizzando il EQU operatore di verificare prima se %ERRORLEVEL% EQU 0
, quindi l'operatore per ottenere l'effetto opposto, equivalente al !=
operatore.Tuttavia, credo che questo funziona solo su macchine NT, non DOS puro.
Riferimenti:
http://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html
Hai provato la 'pausa' di comando?
@echo off
echo hello world
pause
- più informazioni su 'pausa' : http://technet.microsoft.com/en-us/library/bb490965.aspx
- Riga di Comando DOS riferimento A-Z : http://technet.microsoft.com/en-us/library/bb490890.aspx