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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top