2010-08-12 20 views
6

Dopo quasi un decennio di codifica C# e VC++, sto tornando a un ambiente linux-g ++-make-emacs.Come rilevare le modifiche alle intestazioni nella lista delle dipendenze

Cercando di rinfrescarmi la memoria su come scrivere un file di make non ho avuto molti problemi, ma mi sono imbattuto nel seguente problema, che ammetto non mi ricordo come ho risolto in passato:

Diciamo che un particolare file .cpp ha alcune dipendenze da molti altri file di intestazione (mettendo da parte l'intestazione corrispondente che è facile da gestire) ... Qual è il modo migliore per scoprire che alcuni dei .h sono stati modificati?

Non mi piace l'idea di inserirli nella mia lista di destinazione, poiché questo è un processo manuale e soggetto a errori!

La risposta facile è ovviamente quella di costruire pulito ogni volta che c'è un cambio .h, ma non riesco davvero a ricordare quale fosse il modo standard ....

In VC++ non ho avuto a che fare con questo dato che l'IDE è stato molto bravo a dipendenze di movimentazione ...

risposta

6

Guarda automated dependencies. gcc con i flag -M -MD -MT ecc. analizzerà il tuo file e le dipendenze di calcolo. Passali attraverso sed. Ci sono molti esempi che Google troverà.

1

Come @deinst menzionato, gcc ha la capacità di generare tutti i file di intestazione che il tuo cpp usa direttamente e indirettamente. Quello che vi serve è più o meno la seguente:

obj-file: src-file 

# dep file should be recreated each time header file or header file it depends on is changed 
dep-file: src-file 
    gcc -M ...... > dep-file 
    modify dep-file to make dep-file depend and all header files too 

include dep-file 

E 'stata implementata una volta nel progetto sono stato impegnato, ma la piena attuazione del l'idea era una lunga e difficile.

Se si ha la possibilità di prendere in considerazione strumenti più potenti che supportano l'autodepurazione, come ad esempio cmake o scons. Personalmente ho lavorato con cmake - ogni programmatore può scrivere un file cmake e l'autodepency è gratis.

2

deinst e idimba avete sulla strada giusta. Per leggere le potenziali insidie ​​che potresti incontrare e come evitarli, dai un'occhiata a questo articolo.

http://mad-scientist.net/make/autodep.html

+0

+1 per un collegamento piacevole – dimba

Problemi correlati