2009-06-20 20 views
12

Ho un progetto di Visual Studio con circa 60 file di origine C++. Posso fare una compilazione e si completa senza errori. Ma se prendo di nuovo immediatamente F7, ricompila sempre circa 50 dei file sorgente. Non ricompila tutti i file, il che è strano.Perché Visual Studio 2008 ricostruisce sempre tutto il mio progetto?

Ho impostato 'Abilita ricostruzione minima' (/ Gm). Qualche idea sul perché potrebbe farlo? Nessuno dei file ha una data modificata in futuro.

+1

Quale lingua? C++? C#? VB? –

+0

Siamo spiacenti. È principalmente C++, con alcuni C. – Rocketmagnet

+2

Il problema scompare se si esegue "Soluzione/Pulizia" e/o "Ricostruisci tutto"? Va via se si disattiva l'opzione "Abilita la ricostruzione minima"? – ChrisW

risposta

8

Le date del tuo file sono in futuro? Questo può verificarsi se hai cambiato fuso orario o modificato l'ora dell'orologio di sistema. Le date in futuro confonderanno l'IDE e forzeranno una ricostruzione ogni volta che viene colpito F7 o F5.

+1

Nessuno dei file sorgente è in futuro. Ho controllato tutti i file. – Rocketmagnet

+3

Questo è sempre stato il caso quando questo mi è successo. Controlla le date dei tuoi file, comprese le intestazioni da fonti esterne! – Mehrdad

+0

Mi è capitato molte volte e non è mai stato così. –

5

Molto probabilmente è una questione di dipendenze.

considerare le seguenti possibilità:

  • Se avete personalizzato costruire strumenti definiti per alcuni dei file nella soluzione, assicurarsi che la proprietà di uscita contiene il nome del file a destra (s). Se l'output dello strumento di compilazione non corrisponde a uno o più nomi specificati nei nomi dei file di output, il builder ricostruirà il file.

  • Se si dispone di eventi di compilazione personalizzati, verificare se l'output di tali eventi di build non influisce sulle dipendenze dei file da creare.

  • Ho avuto problemi durante il tentativo, in fase di post-produzione, di copiare o spostare alcuni file di output in una cartella di build. Le operazioni di post-produzione che influenzano il timestamp dei file ouput del processo di generazione determineranno ogni volta la ricostruzione.

+0

Non ho eventi di compilazione personalizzati. Tutto è solo una normale compilazione e collegamento, con le librerie. – Rocketmagnet

2

Una ragione è che se la 'data di ultima modifica' per uno dei file sorgente è impostato per qualche data futura: si ricostruisce, e quindi il file di origine è ancora più tardi l'eseguibile.

Questo problema con le date può verificarsi se il file di origine si trova in una directory di una macchina remota (una condivisione di rete) e/o può anche accadere se l'ora della macchina non è sincronizzata con la data della macchina che sta eseguendo il server del tuo sistema di controllo della versione di origine.

+0

Nessuno dei file di origine sarà in futuro. Tutti i file sono sul mio computer locale. – Rocketmagnet

3

Sto avendo lo stesso problema, e sembra essere perché ho disattivato le informazioni di ricerca. Proprietà-> C/C++ -> Sfoglia informazioni-> Abilita Sfoglia Info-> Nessuna. L'unica correzione che ho trovato è di riaccenderlo. Questo è per un progetto xbox 360, perché i miei altri progetti non hanno il problema.

3

Sembra che questo problema può essere causato da molte cose, ma quello fissato per me era:

  1. Chiusura Visual Studio
  2. cancellando manualmente tuttibin e obj cartelle (Clean non lo fa sembra fare il trucco)
  3. Aprire la soluzione e eseguire Clean (non sono sicuro se è necessario, ma l'ho fatto solo nel caso ...)
  4. Edificio come normale

Nota: questo era per un programma C# in Visual Studio 2010.

0

Ciò che mi ha causato sintomi simili è stato: Ho diversi progetti in una soluzione. C'erano dei file .cpp che erano referenziati (e quindi compilati) da> 1 progetti. Sfortunatamente Visual Studio crea file .obj con un nome molto semplice - sostituisce semplicemente ".cpp" con ".obj". La creazione del wrapper .cpp-s con nome diverso ha risolto il problema.

0

Ho avuto qualcosa di simile. Anche se ho avuto eventi pre e post build, non stavano causando il problema. Ho scoperto che avevo un numero di progetti lungo la catena di riferimento che conteneva file di contenuti contrassegnati come "copia sempre" invece di "copia se più recente", il che significa che questi progetti venivano sempre considerati "non aggiornati". Modificando tutti questi elementi in "copia se più recente", le modifiche al progetto di test dell'unità non hanno più costretto a ricompilare tutti gli altri progetti.

4

Nel mio caso di tale effetto (C++ via VS2005) era solo sulla configurazione di rilascio, e Studio indica nell'output di compilazione, che l'opzione del compilatore/Gm viene ignorata se/Zi - l'opzione non è impostata. Dopo aver impostato/Zi tramite

Proprietà di configurazione -> C/C++ -> Generale -> informazioni di debug Formato: Database di programma (/ Zi),

era ok. Ma non c'è qualcosa di sbagliato, quando la Configurazione di rilascio ha bisogno di qualcosa sul debugging? Non ancora chiaro per me!

+0

Questo era il mio problema alla fine, devo aver accidentalmente disattivato le informazioni di debug (/ Zi) sul mio progetto di rilascio - apparentemente è usato durante il processo di costruzione per decidere cosa deve essere compilato! –

+0

Sembra che sia necessario avere una stringa vuota per il nome ProgramDatabase, o devi generare il database. Impostando l'output della build sul livello diagnostico è possibile visualizzare questo messaggio: L'operazione "Elimina" è saltata, a causa di una condizione errata; ... ('ProgramDatabase'! = '' E 'ProgramDatabase'! = 'OldStyle' e 'ARM \ Release \ vc110.pdb'! = '' E! Exists (ARM \ Release \ vc110.pdb)). –

3

Dopo un paio di giorni su google, ho trovato una soluzione al mio problema.

Ho riscontrato questo problema quando ho spostato i miei progetti su un nuovo PC. Avevo controllato più volte la data di creazione dei file. Queste date erano aggiornate, tuttavia le date di modifica erano nella stalla (un po 'bizzarre) anche quando ho cambiato i file.

Un semplice aggiornamento dei file ha risolto il problema.

1

Verificare che il progetto includa qualsiasi file di intestazione .h che non esiste sul disco. Mi capita sempre quando elimino un file di intestazione che in realtà non includo da nessuna parte, ma dimentico di eliminarlo dalla mia soluzione navigator in VS. Nota: le intestazioni mancanti non producono errori durante la compilazione (quando non # include ovunque).

1

Verificare l'impostazione del database del programma Nome file. Per qualche motivo, se questo è impostato sul nome di una directory (come "$(IntDir)\"), a volte può causare che VS ricostruisca il progetto ogni volta, anche se non si generano file PDB (ad esempio, il formato delle informazioni di debug è impostato su " Disabilitato").

Questo è un bug in VS2008; Non l'ho ancora riprodotto in VS2010, ma i miei test non sono stati accurati, quindi non sono sicuro che il comportamento non sia presente in VS2010.

0

La disattivazione di "ricostruzione minima" (Configurazione Proprietà> C/C++> Generazione codice) l'ha risolto per me. Il compilatore ha persino lasciato un indizio:

1> cl: avviso riga di comando D9007: '/ Gm' richiede '/ Zi o/ZI'; opzione ignorata

Anche se devo sottolineare, il compilatore non ha ignorato l'opzione come ha detto.

7

Ho risolto lo stesso problema.

Nel mio caso avviso del compilatore visualizzato, l'opzione/Zi è richiesta se/Gm è specificato.

/Gm abilita la "ricostruzione minima", che richiede le informazioni di debug nel file .pdb. Quindi, se non si desidera utilizzare .pdb, disabilitare anche la ricostruzione minima: ha risolto un problema nel mio caso.

4

Proprietà progetto -> "C/C++" -> "File di output" -> "Nome file nome programma" non deve essere vuoto. Impostare questa opzione selezionando dalla casella a discesa. L'opzione sarà impostata in questo modo: $ (IntDir) \ vc90.pdb. E line ProgramDataBaseFileName = "" verrà rimosso dal file vcproj.

Quindi, solo i file * .cpp modificati verranno ricompilati quando si crea il progetto o la soluzione.

0

Nel mio caso ho cambiato l'ora dei dati di sistema alla data precedente, quindi viene ricostruita ogni volta a causa del diverso timestamp dei file, una volta passati all'ora corrente, non viene ricostruito ogni volta.

0

abbiamo che qui regolarmente:

  • eliminare tutti i file intermedi e di output a mano. L'opzione pulita in vstudio a volte non è sufficiente. Da un nuovo inizio fare la costruzione completa. Se dopo una compilazione completa vstudio vuole ancora ricompilare determinati file potrebbe essere correlato al prossimo proiettile.
  • se nel tuo vcxproj viene fatto riferimento a un file di intestazione che non è su disco, il progetto viene anche ricompilato. Puoi controllare questo con alcune funzionalità nascoste descritte sui blog MSDN o semplicemente toccare (ad esempio, fare clic su di esso per aprire) tutti i file di intestazione nell'esplodere del progetto e vedere se uno non esiste sul disco
0

Aveva lo stesso problema. Risolto da: cartella di output -delete (obj, exe, tutti i file) -run Cygwin -cd cartella del progetto run "tocco *", che Reimp.File modificare data/ora -Costruire e godere problema risolto

0

C'è un problema simile con la ricostruzione del progetto. Visual Studio non ricompila ma ricollega un progetto ogni volta che viene colpito F7.

Il problema è semplice. Prova ad aprire in Editor tutti i file inclusi nel progetto (da Esplora risorse fai doppio clic su ciascun file) e rimuovi dalla soluzione quei file che non esistono.

Problemi correlati