Domanda

Usiamo GNU Make per il nostro sistema. Alla fine dei nostri makefile, abbiamo un include chiamato Makedepends che genera un sacco di file .d usando l'opzione -MM su gcc. Quindi includiamo il file .d per ogni file .cc usando una riga include $ (CXXFILES: .cc = .d). Ma quando eliminiamo il file o spostiamo i file, il passaggio delle dipendenze si interrompe e dobbiamo eliminare manualmente i file .d (anche un clean clean non funziona perché le dipendenze falliscono)

Esiste un modo per generare questi file .d di dipendenza o includere questi file .d di dipendenza che gestiranno con grazia una cancellazione o delocalizzazione dei file?

MODIFICA: Ad esempio: ho serial.cc e i makefile generano un file serial.d che ha una dipendenza da buffer.h, ma poi lo cambio in modo da non aver più bisogno di buffer.h e cancellare il buffer .h. La prossima volta che eseguo make, si strozzerà perché include il file .d che rende ancora seriale.o dipendente da buffer.h.

È stato utile?

Soluzione

http://make.mad-scientist.net/papers / advanced-auto-dependency-generation ha una descrizione di questo esatto problema e un paio di modi per risolverlo. Il primo è un po 'fuorviante, ma il "avanzato" è essenzialmente perfetto.

Altri suggerimenti

Due possibilità:

Innanzitutto, puoi aggiungere una regola al tuo Makefile per eseguire il passaggio di dipendenza:

.SUFFIXES: .d

%.d::
   makedepend_command_here

In caso contrario, dalla sezione Last Resort della pagina info per GNU Make:

  

Ad esempio, durante il test a   makefile, potrebbe non interessarti se   i file di origine contengono solo dati reali   che esistono. Quindi potresti farlo   in questo modo:

 %::
         touch $@
     

per causare tutti i file sorgente necessari   (come prerequisiti) da creare   automaticamente.

Funzionerà per creare file .d vuoti per te?

Se usi makepp con l'opzione --rm-stale , noterà i file che non sono più costruibili e li rimuoverà. Se questo è un normale caso d'uso per te, puoi mettere quell'opzione in .makepprc alla radice del tuo albero di compilazione, e sarà sempre usato.

Ma ovviamente makepp gestisce da solo tutto questo rilevamento delle dipendenze, quindi non è necessario ingombrare il tuo makefile. È anche meglio del tuo approccio, perché può generare le intestazioni necessarie in tempo per il compilatore, dove gcc -MM fallirebbe.

C'è molto altro da creare. Oltre a fare quasi tutto ciò che GNU può fare, ci sono molte altre cose utili e puoi persino estendere i tuoi makefile con un po 'di programmazione Perl.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top