Pregunta

Parte de la instalación de una aplicación de la que soy responsable compila algunas bibliotecas de código C.Esto se hace en una consola usando GNU Make.

Entonces, como parte de la instalación, se abre una ventana de la consola, ve el asistente de creación del archivo de salida mientras se compila y vincula; cuando finaliza, la ventana de la consola se cierra y el instalador continúa.

Todo bien, salvo que haya un error de compilación.Luego, el archivo make falla y la ventana de la consola se cierra antes de que tengas la oportunidad de descubrir qué está sucediendo.

Entonces, lo que me gustaría que sucediera es que la ventana de la consola se pausara con una funcionalidad del tipo "presione una tecla para continuar", si hay un error en el archivo MAKE, para que la consola permanezca abierta.De lo contrario, simplemente salga normalmente y cierre la consola.

No puedo entender cómo hacer esto en un GNU Makefile o desde un archivo por lotes que pueda ejecutar Make.

¿Fue útil?

Solución

Esto debería funcionar:

if not ERRORLEVEL 0 pause

tipo help if en DOS para obtener más información sobre el uso del nivel de error.

Otros consejos

Esto es lo que estás buscando:

if ERRORLEVEL 1 pause

si escribes

HELP IF

obtienes esta información:Número de nivel de error | Especifica una condición verdadera si el último programa en ejecución devolvió un código de salida igual o mayor que el número especificado.

Usando este sencillo programa C para manipular el código de salida:

#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 probar el código de salida en un archivo por lotes al igual que:

test.exe 0
IF ERRORLEVEL 0 PAUSE

Condición: 0 => 0 == TRUE

Cuando ERRORLEVEL = 0, la pausa se producirá porque la lógica es >= o mayor que o igual.Esto es importante, ya que no está claro de inmediato que la afección no sea una == comparación.

Observe que al sustituir 1 => 0 también será cierto y, por lo tanto, también se producirá la pausa.Esto es válido para cualquier número positivo.

Sólo podemos provocar el efecto contrario bajando 0:

test.exe -1
IF ERRORLEVEL 0 PAUSE

Condición: -1 => 0 == FALSE

desde un ERRORLEVEL de 1 normalmente significa que hay un error, y 0 no hay error, simplemente podemos aumentar el mínimo en la condición de comparación para obtener lo que queremos así:

test.exe 0
IF ERRORLEVEL 1 PAUSE

Condición: -1 => 1 == FALSE

Condición: 0 => 1 == FALSE

Condición: 1 => 1 == TRUE

En este ejemplo.el guión se detendrá cuando ERRORLEVEL es 1 o mas alto

Tenga en cuenta que esto permite -1 códigos de salida iguales que 0.¿Qué pasa si uno sólo quiere 0 ¿Para no hacer una pausa?Podemos usar una sintaxis separada:

test.exe 0
IF NOT %ERRORLEVEL% EQU 0 PAUSE

Condición: -1 != 0 == TRUE

Condición: 0 != 0 == FALSE

Condición: 1 != 0 == TRUE

En este ejemplo, el script se detiene si %ERRORLEVEL% no es 0 Podemos hacer esto usando el operador EQU para verificar primero si %ERRORLEVEL% EQU 0, entonces el operador NOT para obtener el efecto contrario, equivalente al != operador.Sin embargo, creo que esto sólo funciona en máquinas NT, no en DOS simples.

Referencias:

http://chrisoldwood.blogspot.ca/2013/11/if-errorlevel-1-vs-if-errorlevel-neq-0.html http://ss64.com/nt/errorlevel.html

¿Has probado el comando 'pausar'?

@echo off
echo hello world
pause
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top