tutorial make makefile gnu-make

tutorial - makefile linux



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

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

Intento crear un objetivo de prueba que ejecutará mi programa varias veces, guardando los resultados en un archivo de registro. Algunas pruebas deberían hacer abortar mi programa. Lamentablemente, mi archivo MAKE aborta 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, realice salidas después de la ejecución de bad_input1, sin llegar nunca a la ejecución de bad_input2.


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

de modo que obtuviste todos los errores y resultados para ver qué sucedió.

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

Por cierto, recomiendo obtener una copia del libro de O''Reilly en 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 ed. todavía tiene la explicación más clara de lo que está sucediendo realmente. De hecho, mi propia copia es lo primero que le paso a las personas que acuden a mí para preguntar "¡preguntas WTF!" Sobre la marca. (-:


La solución adecuada si quiere 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.


Ponga un - antes del comando, por ejemplo:

-myProg bad_input >> test.log

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