it-swarm.dev

¿Cómo hacer que GNU haga una prueba explícita de falla?

Después de años de no usar make, me encuentro necesitándolo nuevamente, la versión gnu ahora. Estoy bastante seguro de que debería poder hacer lo que quiero, pero no he descubierto cómo, o no he encontrado una respuesta con Google, etc.

Estoy tratando de crear un objetivo de prueba que ejecutará mi programa varias veces, guardando los resultados en un archivo de registro. Algunas pruebas deberían hacer que mi programa se cancele. Desafortunadamente, mi archivo MAKE se cancela en la primera prueba que conduce a un error. Tengo algo como:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2

Con lo anterior, salga después de la ejecución bad_input1, sin llegar nunca a la ejecución bad_input2.

62
GreenMatt

La solución adecuada si desea que el objetivo falle es negar su código de salida.

# Makefile
# 
test:
    myProg -h > test.log              # Display help
    myProg good_input >> test.log     # should run fine
    ! myProg bad_input1 >> test.log      # Error 1
    ! myProg bad_input2 >> test.log      # Error 2

Ahora, es un error tener éxito en esos dos casos.

16
tripleee

Pon un - antes del comando, por ejemplo:

-myProg bad_input >> test.log

GNU make ignorará el código de salida del proceso.

120
please delete me

Intenta ejecutarlo como

make -i

o

make --ignore-errors

que ignora todos los errores en todas las reglas .

También sugiero ejecutarlo como

make -i 2>&1 | tee results

para que obtenga todos los errores y resultados para ver qué sucedió.

Continuar ciegamente después de un error probablemente no sea lo que realmente quieres hacer. La utilidad make, por su propia naturaleza, generalmente depende de la finalización exitosa de comandos anteriores para que pueda usar los artefactos de esos comandos como requisitos previos para que los comandos se ejecuten más adelante.

Por cierto, altamente recomiendo obtener una copia de el libro de O'Reilly sobre make . La primera edición tiene una excelente visión general de la naturaleza básica de la marca, específicamente su comportamiento de encadenamiento hacia atrás. Las ediciones posteriores siguen siendo buenas, pero la primera edición. todavía tiene la explicación más clara de lo que realmente está sucediendo. De hecho, mi propia copia es lo primero que le paso a las personas que vienen a mí para hacer "¿Preguntas de WTF?" Sobre make! (-:

30
Rob Wells