Ultimamente stiamo discutendo sul modo in cui gestiamo i file .d per le dipendenze nel nostro processo di build basato su make. È stato sollevato il problema che a volte i file .d possono essere danneggiati quando i build vengono interrotti.Getting make to delete additional files on error
Stiamo utilizzando la destinazione .DELETE_ON_ERROR per garantire che se una build viene interrotta o non sia riuscita, i file oggetto che era in fase di generazione vengono eliminati. Tuttavia, stiamo anche utilizzando GCC per generare file .d in fase di compilazione, che dovrebbero essere eliminati. Non sembra essere un modo semplice per dirlo su questo.
Quindi la domanda è, c'è un modo in cui possiamo fare in modo di eliminare sia il nostro oggetto che i nostri file di dipendenza in caso di errore? C'è un modo in cui possiamo impostare le regole in modo che sappia che entrambi i file .d e .o sono generati nello stesso momento e devono essere cancellati se c'è un errore?
In alternativa, c'è qualcos'altro che possiamo fare per risolvere il problema dei file .d corrotti? Un suggerimento lungo queste linee è quello di generare i file .d con un nome temporaneo e avere un passaggio post-compilazione separato per file che lo copia con il nome corretto.
Il '.DELETE_ON_ERROR:' nella parte superiore del makefile permettimi di eliminare tutti i miei tempfile. Grazie! –
Suggerirei di mettere il mv come seconda riga nella ricetta per la regola del modello "% .o:% .c".Non vedo alcun cambiamento nel comportamento o beneficio per l'utilizzo della shell '&&' per metterlo sulla prima riga. –
@RichardPerrin la proposta produrrà un comportamento errato se gmake viene invocato con l'opzione '-i' (ignore errori). In tal caso, la tua versione eseguirà il comando 'mv' indipendentemente dal fatto che ci sia o meno un errore in' gcc', mentre il mio originale no. –