Estoy trabajando en un proyecto grande que debe compilarse en múltiples entornos, principalmente linux/gcc y windows/msvc. Para acelerar la construcción, usamos encabezados precompilados.Sin aceleración con encabezados precompilados en gcc (pero gran aceleración con Visual Studio)
La implementación de Windows es muy eficiente: en mi quad-core hyperthreaded i7, el tiempo de construcción disminuye de 9 minutos a 1.5 minutos. Sin embargo, el uso de encabezados precompilados no parece mejorar el rendimiento: en ambos casos se genera en 22 minutos debajo de una caja virtual en la misma computadora, o alrededor de 40 minutos en un servidor real.
Así que estoy pensando lo obvio, que de alguna manera tengo algo mal y que el encabezado precompilado no está funcionando. No obstante, no puedo encontrar qué.
Nuestros Makefiles son generados por CMake, por lo que puedo copiar y pegar el código utilizado para compilar el encabezado y los archivos de objetos que los utilizan.
Creación de la cabecera:
/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"
Compilar un archivo de objeto:
/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 son apreciados, incluso si no lo hacen directamente se derivan de los fragmentos anteriores.
Tienes suerte, he encontrado que el uso de encabezados precompilados con GCC incluso ralentiza la compilación. CLANG fue mejor hace algún tiempo, pero ahora parece que no vale la pena usar encabezados precompilados, dejando a MSVC como el único compilador que se beneficia de él. – Lothar