Sto lavorando su un progetto di grandi dimensioni che deve essere compilato in più ambienti, principalmente linux/gcc e windows/msvc. Per accelerare la build, utilizziamo le intestazioni precompilate.Nessuna accelerazione con intestazioni precompilate su gcc (ma grande accelerazione con Visual Studio)
L'implementazione di Windows è molto efficiente: il tempo di costruzione i7 con iperthreading quad-core scende da 9 minuti a 1,5 minuti. Tuttavia, l'utilizzo di intestazioni precompilate non sembra migliorare le prestazioni: in entrambi i casi, si crea in 22 minuti sotto una scatola virtuale sullo stesso computer, o circa 40 minuti su un server reale.
Quindi penso che sia ovvio, che in qualche modo ho qualcosa di sbagliato e che l'intestazione precompilata non sta dando il calcio. Non riesco a trovare cosa comunque.
I nostri Makefile sono generati da CMake, quindi posso copiare incollare il codice utilizzato per compilare l'intestazione e i file oggetto che li utilizzano.
Creare l'intestazione:
/usr/bin/c++ -O3 -DNDEBUG --no-warnings "-I/mnt/code/server a/src/game"
"-I/mnt/code/server a/src/game/vmap" "-I/mnt/code/server a/dep/include/g3dlite"
"-I/mnt/code/server a/dep/include" "-I/mnt/code/server a/src/shared"
"-I/mnt/code/server a/src/framework" "-I/mnt/code/server a/buildlinux"
"-I/mnt/code/server a/buildlinux/src/shared" -I/usr/include/mysql
"-I/mnt/code/server a/dep/acelite" -DDO_MYSQL -DHAVE_CONFIG_H
-DVERSION=\"0.6.1\" -DSYSCONFDIR=\"../etc/\" -D_RELEASE -D_NDEBUG -x c++-header
-o "/mnt/code/server a/buildlinux/src/game/pchdef.h.gch" "/mnt/code/server
a/src/game/pchdef.h"
Compilazione di un file oggetto:
/usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) "-I/mnt/code/server
a/buildlinux/src/game" -include pchdef.h -Winvalid-pch -o
CMakeFiles/game.dir/AccountMgr.cpp.o -c "/mnt/code/server
a/src/game/AccountMgr.cpp"
Insights sono apprezzati, anche se non lo fanno direttamente derivano dai frammenti di cui sopra.
Sei fortunato, ho scoperto che l'utilizzo di intestazioni precompilate con GCC rallenta anche la compilazione. CLANG era migliore qualche tempo fa, ma ora sembra inutile usare intestazioni precompilate, lasciando MSVC come l'unico compilatore che ne trae beneficio. – Lothar