Últimamente estamos discutiendo sobre la forma en que manejamos los archivos .d para las dependencias en nuestro proceso de compilación basado en make. Se ha planteado el problema de que a veces los archivos .d se pueden dañar cuando se interrumpen las compilaciones.Cómo hacer para eliminar archivos adicionales en caso de error
Estamos utilizando el destino .DELETE_ON_ERROR para garantizar que si una compilación se interrumpe o falla, los archivos de objeto que estaba en proceso de generación se eliminan. Sin embargo, también estamos usando GCC para generar archivos .d en tiempo de compilación, que también deberían eliminarse. No parece haber una forma directa de decir sobre esto.
Entonces, la pregunta es, ¿hay alguna manera de convencernos para eliminar nuestro objeto y nuestros archivos de dependencia en caso de error? ¿Hay alguna forma en que podamos configurar las reglas para que sepa que los archivos .d y .o se generan al mismo tiempo y deben eliminarse si hay un error?
O bien, ¿hay algo más que podamos hacer para solucionar el problema de los archivos .d corruptos? Una sugerencia en este sentido es generar los archivos .d con un nombre temporal y tener un paso de compilación posterior por cada archivo que lo copie al nombre correcto.
El '.DELETE_ON_ERROR:' en la parte superior del archivo make me permite deshacerme de todos mis archivos temporales. ¡Gracias! –
Sugeriría poner el mv como la segunda línea en la receta para la regla de patrón "% .o:% .c".No veo ningún cambio en el comportamiento ni en los beneficios del uso del intérprete de comandos '&&' para colocarlo en la primera línea. –
@RichardPerrin su propuesta producirá un comportamiento incorrecto si se invoca gmake con la opción '-i' (ignorar errores). En ese caso, su versión ejecutará el comando 'mv' ya sea que haya o no un error en' gcc', mientras que mi original no lo hará. –