2009-11-23 5 views
6

Vorrei generare automaticamente un elenco di dipendenze Makefile, ma sto usando Visual Studio 2005. Se stavo usando GCC, potrei passare a -M (o una delle tante varianti) per creare questo elenco di dipendenze.Il compilatore di Visual Studio C ha un equivalente a GCC -M?

Guardando attraverso le opzioni da riga di comando a cl.exe, non vedo nulla di ovvio. Posso gestire il tweaking dell'output con la post-elaborazione, ma più si avvicina e meglio è.

risposta

3

ho avuto a che fare con questo problema esatto. Volevamo aggiungere uno script che sostituisse l'opzione -M. Ecco come ho fatto:

  1. trovare un preprocessore fonte (ed i percorsi di inclusione & definisce il necessario)
  2. eseguirlo sul file che vi serve, e dovrebbe produrre una versione pre-elaborato.
  3. maggior parte dei preprocessori dispongono di un interruttore che consente info extra (ad esempio il file dove alcuni frammento di codice è venuto da)
  4. scrivere un semplice script per estrarre tutti i nomi di intestazione
  5. creare una serie di loro, in modo da filtrare i duplicati.

È così che l'ho fatto, e ha funzionato. In bocca al lupo!

+0

Eventuali puntatori ai quali hai usato il preprocessore? – Shepmaster

+2

È possibile utilizzare Visual Studio per questa attività. Un buon preprocessore stand-alone è 'mcpp'. Puoi trovarlo qui 'http: // mcpp.sourceforge.net /'. – Geo

+0

Non l'ho ancora implementato, ma questa sembra la soluzione migliore. L'utilizzo di Visual Studio suona come il percorso corretto ed evita di dover impostare set di flag separati (uno per le dipendenze e un altro per la creazione). – Shepmaster

0

Non direttamente con cl.exe, ma con questo involucro si può ottenere quello che stai cercando:

http://msdn.microsoft.com/en-us/library/y209k0z6.aspx

+0

Funziona con il flag '-M' di gcc? La maggior parte delle mappature dei flag del compilatore sarebbe banale, ma quella richiede praticamente l'esecuzione del pre-processore (o qualcosa del genere). –

+0

Il compilatore VC++ ha un'opzione di pre-elaborazione, ma non lo farà. Le impostazioni '-M. *' Che l'OP vuole sono tra quelle non supportate da quel pacchetto. Vedi il fondo di 'ccFile.cfg', se lo hai installato, o http://pastebin.com/m1707aa02 –

0

Abbiamo avuto lo stesso identico problema con Fortran e abbiamo finito per dover scrivere il nostro mini-compilatore per scansionare il codice sorgente e attraversare tutto il #includes.

+0

quanto tempo hai dovuto fare questo? – Geo

5

Nel cl.exe di Visual Studio 2005 almeno, c'è l'opzione /showIncludes.

2

Il compilatore memorizza le dipendenze nel file .idb intermedio. Potresti essere in grado di analizzarlo da lì.

Vedi https://msdn.microsoft.com/en-us/library/kfz8ad09.aspx

si possono trovare tutti i file con prefisso "/ mr/inversedeps /" o "/ ipm/intestazione /" in là compreso, a quanto pare.


Penso che dovresti trovare anche le dipendenze in altri file intermedi, ad es. "CL.read.1.tlog".