Esistono due tipi di build: clean build e incremental .
Un clean build parte sempre da zero: non prende nient'altro che il semplice progetto come input, calcola le dipendenze e costruisce tutte le parti in ordine, quindi le assembla nell'output finale. Una build pulita, per definizione, deve ricompilare tutti i file sorgente nel progetto; mentre lo fa, produce file intermedi, come .obj
file, che non sono né binari sorgente né binari shippabili - una volta che la compilazione è completa, puoi buttarli via (che è cosa dovrebbe fare Build>Clean Solution
), oppure tu possiamo lasciarli sul posto per dopo, il che ci porta a ...
Versioni incrementali . Una build incrementale confronta la data dell'ultima modifica del file sorgente con il timestamp sui file intermedi che produce, così come qualsiasi altra cosa che dipende da esso ('target'); se una dipendenza è stata modificata dopo la creazione dell'obiettivo, la destinazione viene ricostruita, altrimenti viene riutilizzato il file della build precedente. Ad esempio, se hai users.c
, che viene compilato in users.obj
(un target di compilazione) e include users.h
e basics.h
(dipendenze), la build incrementale controllerà i timestamp su tutti questi file e se nessuno di loro è più recente di quello su users.obj
, quindi users.obj
viene ricostruito; in caso contrario, il users.obj
esistente è considerato valido e questo particolare passo di generazione può essere saltato.
Poiché le build incrementali ricostruiscono solo ciò che deve essere, in genere sono molto più veloci di quelle pulite: per progetti grandi ma ben strutturati, la differenza può essere solo di pochi secondi rispetto alla pausa pranzo.
Tuttavia, determinare correttamente le dipendenze confina con la magia nera e alcune impostazioni generali invalidano tutte le sostanze intermedie (ad es. se si cambia architettura di destinazione), quindi se si desidera "la cosa reale", la maggior parte delle persone consiglia di eseguire una compilazione completa. Infatti, praticamente tutte le configurazioni di Continuous Integration (dove un build server esegue una build completa ogni volta che il nuovo codice viene trasferito al master repository, completamente automatico) usano clean build, semplicemente perché sono l'unico modo affidabile per assicurarsi che tutto sia < em> veramente veramente aggiornato.