Domanda

Quali sono i migliori candidati per un file di intestazione precompilato?Posso inserire le intestazioni STL e Boost lì, anche se hanno modelli?E questo ridurrà i tempi di compilazione?Inoltre, quali sono le migliori impostazioni IDE per ridurre i tempi di compilazione?

È stato utile?

Soluzione

La risposta rapida:le intestazioni STL e Boost appartengono effettivamente al file di intestazione precompilato, anche se questi file di intestazione definiscono classi di modello.

Quando si genera un file di intestazione precompilato, un compilatore analizza il testo dell'intestazione (un compito significativo!) e lo converte in un formato binario ottimizzato a vantaggio del compilatore.

Anche se le classi modello verranno istanziate quando verranno compilati altri file .cpp, verranno istanziate dalle informazioni nell'intestazione precompilata, che è significativamente più veloce da leggere per il compilatore.


(aggiunta successiva)

Una cosa che dovresti non includere in un'intestazione precompilata sono file che fanno parte del tuo progetto e vengono modificati frequentemente, anche se ogni singolo file .CPP include questi file.

Il motivo è questo: la generazione dell'intestazione precompilata può richiedere molto tempo, poiché le librerie boost, stl e Windows sono molto grandi.

Potresti avere un semplice file (ad esempio "StringDefs.h") che tutto utilizza.Se StringDefs.h è incluso in stdafx.h e uno sviluppatore tocca StringDefs.h, allora ogni sviluppatore deve attendere fino a quando intera intestazione precompilata ricompila.Sarebbe molto più veloce se StringDefs.h fosse escluso dall'intestazione precompilata e analizzato insieme a ciascun file .CPP.

Altri suggerimenti

Un'aggiunta alla risposta di Andrew Shepherd. Utilizzare l'intestazione precompilata per i file di intestazione che sono esterni al progetto, per i file che cambiano raramente. Se stai cambiando i file header nel progetto corrente per tutto il tempo, non è probabilmente vale la pena di loro precompilazione.

Ho scritto un articolo su tecniche che riducono il tempo di compilazione. Tra queste tecniche un post su un'intestazione precompilata e la sua applicazione può essere trovato qui . Essa ha anche una sezione sulle migliori pratiche che si possono trovare interessanti. script CMake che gestiscono in modo trasparente sono inclusi.

Mettere nulla nell'intestazione precompilata che la maggior parte dei file cpp in quel progetto includerebbe comunque. Questo vale per qualsiasi file di intestazione, davvero. Questo permette al compilatore di analizzare questi file una volta, e quindi riutilizzare le informazioni in tutti i file cpp nello stesso progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top