Il preprocessore definisce i tempi di costruzione rallentati?

1

Ho un progetto c ++ molto grande e sto cercando di ridurre i tempi di costruzione. Sono stato religioso riguardo alla dichiarazione in avanti e includendo solo i file che vengono utilizzati. Comunque ho molte definizioni di preprocessore che sono impostate nei file di progetto (cioè non nei file cpp o header) in modo che possa tenerle tutte in una posizione centrale per le mie diverse configurazioni di compilazione. È possibile che ciò potrebbe aumentare i tempi di costruzione? Spostare il preprocessore definirà un file di intestazione in modo che vengano inclusi solo dove necessario accelerare il tempo di compilazione?

Sembra che il tempo di compilazione sia più veloce se il preprocessore non ha bisogno di scansionare e sostituire i file definiti per i file che non ne usano, ma non sono sicuro che ne valga la pena.

    
posta RaWz 20.06.2013 - 01:58
fonte

2 risposte

1

Le macro non utilizzate che sono specificate nella riga di comando del compilatore (attraverso le opzioni -D ) non dovrebbero avere alcun impatto misurabile sui tempi di compilazione. L'analisi degli argomenti della riga di comando è insignificante rispetto al tempo necessario per compilare anche un file sorgente di piccole dimensioni e il compilatore non può saltare comunque il passaggio di pre-elaborazione perché ci sarà invariabilmente qualche #include -s da elaborare e alcune macro da espandere .

    
risposta data 20.06.2013 - 09:52
fonte
2

La mia esperienza con i tempi di costruzione è piuttosto semplice: è lineare con il numero di unità di traduzione. Quindi, se vuoi ridurlo, incolla alcune sorgenti insieme o fai "unity compile". quest'ultimo significa che puoi includere gruppi di file .cpp e compilarli al posto degli originali. Certamente significa che i simboli statici vengono condivisi. Per le variabili non è così difficile da rilevare, perché le funzioni potrebbero essere più complicate.

Una sorgente che può essere solo 100 LOC, o al massimo qualche migliaio di solito raccoglie da 100k a 1M LOC nelle intestazioni incluse. Cosa spiega le figure.

Altre cose da esplorare sono ovviamente intestazioni precompilate e build parallele. Con le regole PCH cambiano in modo significativo, la lotta per non includere cose e il bastone in avanti può essere eliminato.

Dubito che i #definimenti stessi possano causare un impatto misurabile.

Sicuramente tutto dipende molto dal tipo di compilatore che usi.

    
risposta data 20.06.2013 - 02:41
fonte

Leggi altre domande sui tag