2009-07-13 11 views
8

Ho un progetto molto grande con tonnellate di file di intestazione contorti che si includono tutti l'un l'altro. C'è anche un numero enorme di librerie di terze parti da cui dipende. Sto cercando di risolvere il problema, ma ho qualche problema, dato che spesso rimuoverò una direttiva #include solo per scoprire che le cose che includeva sono ancora incluse in uno degli altri file . C'è qualche strumento che può aiutarmi a capire questo? Mi piacerebbe molto essere in grado di fare clic su un file .h e chiedergli quali file CPP è incluso (direttamente o indirettamente), e i percorsi attraverso i quali è incluso, e allo stesso modo fare clic su un file cpp e chiedergli quale. i file h sono inclusi (direttamente e indirettamente). Non ho mai sentito di uno strumento che faccia questo, e un po 'di quick googling non ha trasformato nulla, ma forse non so cosa cercare.C++ include il browser di file

+0

C'è un post simile qui: [http://stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files-in-a-large-c-project](http: //stackoverflow.com/questions/74326/how-should-i-detect-unnecessary-include-files-in-a-large-c-project) – Alex

risposta

4
+0

Mi sento un po 'in colpa nel raccomandare uno strumento non libero a codice chiuso, ma questa è di gran lunga la migliore risposta alla mia domanda. Fa praticamente tutto ciò di cui ho bisogno, e non è molto costoso. Il mio capo ha deciso di acquistare licenze per la maggior parte del dipartimento. – rmeador

+0

Sono solo un utente colpito! Non ho ancora acquistato una licenza e l'ho usata solo durante il periodo di prova, ma finora è stato molto utile. –

3

se si utilizzano i compilatori GCC, provate questo

g++ -M abc.cpp 

mostrerà tutte comprendono le dipendenze per il file abc.cpp

+0

Sto usando Visual Studio 2008. – rmeador

4

per VS2003 c'è/showIncludes bandiera (in C/C++/Proprietà avanzate). Questo stamperà tutte le intestazioni che ogni file .cpp include e ciò che includono, così puoi andare da lì.

Sono sicuro che ci sia la stessa opzione nello stesso posto per VS2008.

+0

questo esiste per VS2008, nello stesso posto. sembra molto promettente. mi dice anche che il mio compito è molto più scoraggiante di quanto pensassi ... – rmeador

0

La tua situazione mi ricorda la mia. Ho un sacco di intestazioni che ho creato che uso come libreria invece di preoccuparmi di una DLL.

Naturalmente il ciclico-includes può diventare fastidioso, così ho trovato che uno strumento come visiva Assist X(1) aiuta con questo genere di cose. Ha una funzione che può trovare riferimenti a cose, in modo da poter facilmente estirpare dove qualcosa viene definito/dichiarato/incluso, ecc. Ha anche molte altre utili funzionalità, quindi ritengo che sia piuttosto utile.

Probabilmente ci sono altri strumenti/plug-in che hanno una funzione di riferimento, ma solitamente come una funzione tra le altre funzioni di refactoring e produttività dell'utilità.

HTH

0

E 'piuttosto noioso, ma è possibile binario cercare il vostro modo per cui un #include avviene utilizzando #error (e il messaggio #pragma) per restringere che includono la linea sta tirando nella terza parte. L'ho fatto nel caso di un singolo file che stavo cercando di rintracciare, ma sembra che il tuo problema sia più grande quindi probabilmente uno degli strumenti che gli altri hanno menzionato sarebbe più efficace.