2012-01-18 26 views
8

C'è un modo per rendere il software costruisce/compilazione più veloce? Abbiamo un albero di compilazione c, C++ che usa makefile che si avvicina alle 2 ore per le nuove build. Mi sono imbattuto in poche soluzioni commerciali come ElectricAccelerator, Sparkbuild, ci sono equivalenti di Open Source?suggerimenti per rendere più veloce costruisce

+0

DUE ORE! L'ultima volta che ho visto i tempi di compilazione era su VAX sovraccarichi. Pesevolmente, questo è un progetto molto grande. Come lo state costruendo? Tutti i file sono presenti su unità di rete o copiati in locale? –

+0

@MartinJames Ho visto 6 ore di tempo di costruzione per qualche progetto lisp, c, java. –

+3

@Shiplu - Mi dispiace così tanto che diventerei pazzo. Se la costruzione si guasta dopo 5,9 ore, come ti fermi a saltare da un alto edificio? Che cosa fai allo sviluppatore che ha generato l'esterno non risolto? È molto doloroso? –

risposta

8

Si consiglia di guardare distcc, ccache e, naturalmente, fare opzione -j.

9

una ricerca su Google potrebbe aiutare a ottenere la lista dei software open source.
W.r.t il codice si possono fare le seguenti per ridurre i tempi di costruzione:

  • dichiarazioni avanzata di utilizzo, ove possibile.
  • Usa dichiarazioni di namespace invece di direttiva namespace.
  • Assicurati di non includere accessori non necessari.
+0

Vorrei poter fare più +1! –

+0

@SylvainDefresne: Grazie :) –

+0

Che cosa è * include dichiarazioni *? –

2

Un modo è quello di eseguire semplicemente la generazione su hardware più veloce. Mi rendo conto che questo non è sempre un'opzione, ma è ancora qualcosa da considerare.

Come @Martin menziona, alcuni sottosistemi specifici per l'aggiornamento includono l'utilizzo di un disco il più veloce possibile, come un SSD, l'aggiunta di più RAM, una CPU più veloce (e più core, se il compilatore può utilizzarli), e assicurandosi che i file in costruzione siano tutti locali per la macchina di compilazione (non sulla rete).

si dovrebbe anche dare il processo di compilazione, come gran parte di questo pool di risorse il più possibile, in modo da togliere tutti i processi e le applicazioni non-build legati dalla macchina build. Ciò ridurrà qualsiasi conflitto di risorse.

+1

Sì - array SSD veloci, carichi di RAM, copia origine in cartelle locali per la compilazione. –

+0

Esattamente. La rimozione dei colli di bottiglia sul computer di costruzione è fondamentale.Grazie per aver aggiunto articoli specifici da aggiornare. – cdeszaq

+2

.. e anche surfing, bitTorrent e giochi funzionano molto velocemente, (in quelle brevi interruzioni tra build :) –

4

Nella nostra azienda abbiamo avuto un sacco di prodotto che è più costruire tempo come 3-6 ore.

ci sono 2 tecniche che abbiamo usato.

  1. Usa accumulo parallelo da -j possibilità di make
  2. Mount RAM come disco. Quindi sposta tutti i file lì e compila. Ma hai bisogno di molta RAM per questo. Abbiamo usato istanze di Am2 ec2. Era piuttosto costoso.
+0

'tempo di compilazione come 3-6 ore' - ahi! Penso che troverei un nuovo lavoro .. :) –

+0

@MartinJames Non preoccuparti, Hudson lo fa per me. –

0

Le intestazioni precompilate possono, se utilizzate correttamente, ridurre drasticamente i tempi di costruzione.

0

Utilizziamo una combinazione di distmake, ccache e un makefile-generator che crea un makefile parallelizzabile. Le build C/C++ possono parallelizzare estremamente bene; spesso tutti i file .o possono essere compilati in parallelo.

Distmake è un'implementazione distribuita di make, basata su gnu make e rilasciata in GPL. Lo mantengo. Ti consente di eseguire parallelizzazioni su più host. Ciò richiede che tutti gli host abbiano la stessa vista del filesystem, ad es. NFS, in modo che lo stesso comando possa essere eseguito su qualsiasi host di compilazione.

La disattivazione delle ottimizzazioni tenderà a produrre build più veloci, se si dispone di tale opzione.

Se si utilizza già un'architettura di build parallela ed è ancora lento, potrebbe essere sufficiente studiarlo. Guarda i suoi progressi con un cronometro e vedi dove si trova il collo di bottiglia. Cerca "long pali" che forse non ti aspettavi. In bocca al lupo.

0

Non hai specificato il tuo software di configurazione, ma abbiamo scoperto un problema con clearcase. A causa di come valuta le regole su file per file, l'apertura di un file può essere un collo di bottiglia. Considera solo di leggere ulteriormente se sei "bloccato" con clearcase.

Quindi, abbiamo scoperto che modificando le protezioni di inclusione per i file di intestazione, è possibile ridurre i tempi di costruzione a 1/30 (per noi ha fatto).

In sostanza, nei file di intestazione, si dispone di un include guardia in cima come:

#ifndef FOO_H 
#define FOO_H 
your code 
#endif 

Poi via da qualche altra parte, è #INCLUDE foo.h. Bene, abbiamo scoperto che a causa di alcuni orribili accoppiamenti di tipi di file e simili che alcune intestazioni comuni sono state incluse centinaia di volte per ogni file .c che abbiamo compilato. Con il difetto di progettazione del clearcase, questo significa aprire ciascuno di questi file centinaia di volte solo per ignorare il contenuto e chiudere nuovamente il file.

Quindi .. anziché solo un # include per pippo, utilizzare la guardia per includere condizionatamente foo. Normalmente questa è una cattiva pratica e un orribile incubo di manutenzione (se qualcuno inizia a cambiare le guardie).

Quindi .. nel file .c, che ci si finisce per fare qualcosa di simile:

#include <stdio.h> 
#ifndef FOO_H 
#include "foo.h" 
#endif 
#ifndef FOO_H 
#include "foo.h" 
#endif 
... rest of your code implementation 

Come ho detto ... cattiva pratica, ma se si utilizza ClearCase e la sua si morde con 3 -4 tempi di costruzione (come avevamo) ... potrebbero valere la pena di considerarlo (o semplicemente fare una copia di tutto il tuo albero al di fuori della struttura). Oppure cancella il fossato. Oppure fare un lavoro migliore con il tipo interdipendenze.

Siamo stati in grado di "aggiustare" alcuni degli accessori più usati e ottenere un notevole miglioramento nei tempi di costruzione.

Problemi correlati