write make example create error-handling makefile gnu-make dmake

error-handling - example - using a makefile



¿Puede GNU ejecutar una regla cada vez que se produce un error? (1)

Esto es ligeramente diferente de Can a Makefile ¿ejecuta código SOLAMENTE cuando ocurre un error? .

Me gustaría que se establezca una regla o un objetivo especial cada vez que se produce un error (independientemente del objetivo dado, sin cambiar la regla para cada objetivo, como parece implicar la otra respuesta con el operador ||).

En dmake hay un objetivo especial .ERROR que se ejecuta cada vez que se detecta una condición de error . ¿Hay algo similar con GNU make?

(Todavía estoy usando GNU make 3.81, pero no encontré nada en la documentación del nuevo GNU make 4.0)


Gnu no lo admite explícitamente, pero hay formas de piratear casi cualquier cosa. Haga devoluciones 1 si alguna de las marcas falla. Esto significa que podría, en la línea de comandos, volver a ejecutar make con su regla de error si la primera falla:

make || make error_targ

Por supuesto, supongo que solo quiere poner la complejidad añadida dentro del archivo MAKE. Si este es el caso, puede crear un archivo recursivo make:

all: $(MAKE) normal_targ || $(MAKE) error_targ normal_targ: ... normal make rules ... error_targ: ... other make rules ...

Esto hará que el archivo make intente construir normal_targ, y si falla, ejecutará error_targ. Hace un poco más difícil leer el archivo MAKE para los inexpertos, pero pone toda la lógica en un solo lugar.