Pausa GNU make em um console do Windows se ocorrer um erro
Pergunta
Parte da instalação de um aplicativo eu sou responsável por, compila algumas bibliotecas de código C. Isso é feito em um console usando o GNU make.
Assim, como parte da instalação, uma janela do console se abre, você vê o wiz saída do arquivo make por como ele compila e links, quando terminar as fecha a janela do console e o instalador continua.
Tudo bem, a menos que haja um erro de compilação. Em seguida, os erros de arquivo fazer para fora e fecha a janela de console antes de você ter a chance de descobrir o que está acontecendo.
Então, o que eu gostaria de acontecer é ter a pausa janela do console com um 'pressione uma tecla para continuar' funcionalidade tipo, se houver um erro do makefile de modo que as estadias console aberto. Caso contrário, basta saída como normal e perto do console.
Eu não posso trabalhar para fora como fazer isso em um GNU Makefile ou de um arquivo de lote que pode executar o Marca.
Solução
isso deve fazer o truque:
if not ERRORLEVEL 0 pause
tipo help if
em DOS para obter mais informações sobre o uso errorlevel.
Outras dicas
Isto é o que você está procurando:
if ERRORLEVEL 1 pause
Se você digitar
HELP IF
você obter esta informação: número ERRORLEVEL | Especifica uma condição verdadeira se o último programa executado retornou um código de saída igual ou superior a o número especificado.
Usando este programa C simples de manipular o código de saída:
#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;
}
}
Podemos testar o código de saída em um arquivo de lote assim:
test.exe 0
IF ERRORLEVEL 0 PAUSE
Estado : 0 => 0 == TRUE
Quando ERRORLEVEL = 0
, a pausa irá ocorrer porque a lógica é >=
ou maior-ou-igual . Isto é importante, pois não é imediatamente claro que a condição não é uma comparação ==
.
Observe que subsituting para 1 => 0
também será verdade, e assim a pausa ocorrerá também. Isto é verdade para qualquer número positivo.
Podemos desencadear o efeito oposto apenas por ir abaixo 0
:
test.exe -1
IF ERRORLEVEL 0 PAUSE
Estado : -1 => 0 == FALSE
Uma vez que um ERRORLEVEL
de 1
normalmente significa que há um erro, e 0
nenhum erro, podemos apenas aumentar o mínimo na condição de comparação para obter o que queremos assim:
test.exe 0
IF ERRORLEVEL 1 PAUSE
Estado : -1 => 1 == FALSE
Estado : 0 => 1 == FALSE
Estado : 1 => 1 == TRUE
Neste exemplo. o script fará uma pausa quando ERRORLEVEL
é 1
ou superior
Observe que isso permite -1
códigos de saída o mesmo que 0
. E se um só quer 0
para não fazer uma pausa? Podemos usar uma sintaxe separada:
test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE
Estado : -1 != 0 == TRUE
Estado : 0 != 0 == FALSE
Estado : 1 != 0 == TRUE
Neste exemplo, as pausas de script se %ERRORLEVEL%
não é 0
Podemos fazer isso usando o operador EQU para primeiro verificar se %ERRORLEVEL% EQU 0
, então o operador NOT para obter o efeito oposto, equivalente ao operador !=
. No entanto, eu acredito que isso só funciona em máquinas NT, não plain DOS.
Referências:
http: / /chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html
Você já tentou o comando 'pause'?
@echo off
echo hello world
pause
- obter mais informações sobre 'pause': http://technet.microsoft. com / en-us / library / bb490965.aspx
- DOS Command Line referência AZ: http://technet.microsoft.com /en-us/library/bb490890.aspx