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
risposta
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.
Vorrei poter fare più +1! –
@SylvainDefresne: Grazie :) –
Che cosa è * include dichiarazioni *? –
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.
Sì - array SSD veloci, carichi di RAM, copia origine in cartelle locali per la compilazione. –
Esattamente. La rimozione dei colli di bottiglia sul computer di costruzione è fondamentale.Grazie per aver aggiunto articoli specifici da aggiornare. – cdeszaq
.. e anche surfing, bitTorrent e giochi funzionano molto velocemente, (in quelle brevi interruzioni tra build :) –
Nella nostra azienda abbiamo avuto un sacco di prodotto che è più costruire tempo come 3-6 ore.
ci sono 2 tecniche che abbiamo usato.
- Usa accumulo parallelo da
-j
possibilità dimake
- 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.
'tempo di compilazione come 3-6 ore' - ahi! Penso che troverei un nuovo lavoro .. :) –
@MartinJames Non preoccuparti, Hudson lo fa per me. –
Le intestazioni precompilate possono, se utilizzate correttamente, ridurre drasticamente i tempi di costruzione.
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.
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.
- 1. Suggerimenti per rendere più veloce un'applicazione web asp.net
- 2. Suggerimenti per rendere un codice calcolatrice frazione più ottimizzato (più veloce e utilizzando meno memoria)
- 3. Un modo per rendere md5_file() più veloce?
- 4. Come rendere JOINS più veloce?
- 5. Come rendere Pycharm più veloce/più leggero?
- 6. Come rendere questo script sed più veloce?
- 7. Come rendere l'avvio dell'emulatore Android più veloce
- 8. Come rendere CreateFile il più veloce possibile
- 9. Come posso rendere più veloce il cout?
- 10. Come rendere la deserializzazione XML più veloce?
- 11. Come rendere più veloce l'idea di intellij?
- 12. Il modo più veloce per rendere il sito web reattivo?
- 13. Quali cose possono rendere più veloce lo sviluppo di CSS?
- 14. Rendere il mio List.filter più veloce su Scala?
- 15. Come rendere la mia integrazione Python più veloce?
- 16. Come rendere la mia copia di file più veloce
- 17. Come rendere più veloce il timeout di SqlConnection
- 18. Come posso rendere il mio script Python più veloce?
- 19. Sostituzione più veloce per Regex
- 20. Alternative più veloce per cvFindContour()
- 21. più veloce?
- 22. Più veloce di JODCONVERTER
- 23. Come rendere veloce Java 8 Nashorn?
- 24. Come rendere veloce il mio codice
- 25. Come rendere GGTS/STS super veloce?
- 26. Come usare hudson quando si costruisce per più piattaforme
- 27. Vuoi un modo semplice e veloce per rendere più veloci le zecche di una trama 3D
- 28. Qualche "quick wins" per rendere il servizio di remoting .NET più veloce su una singola macchina?
- 29. Rendere lo swap più veloce, più facile da usare ed eccezionalmente sicuro
- 30. maresciallo discariche più veloce, più veloce cPickle carichi
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? –
@MartinJames Ho visto 6 ore di tempo di costruzione per qualche progetto lisp, c, java. –
@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? –