Ich arbeite an einem großen Projekt, das unter mehreren Umgebung erstellt werden muss, vor allem Linux/GCC und Windows/msvc. Um den Build zu beschleunigen, verwenden wir vorkompilierte Header.Keine Beschleunigung mit vorkompilierten Headern auf gcc (aber große Beschleunigung mit Visual Studio)
Die Windows-Implementierung ist sehr effizient: auf meinem Quad-Core hyperthreaded i7 baut die Zeit von 9 Minuten auf 1,5 Minuten. Die Verwendung vorkompilierter Header scheint die Leistung jedoch nicht zu verbessern: In beiden Fällen wird sie in 22 Minuten unter einer virtuellen Box auf demselben Computer oder in etwa 40 Minuten auf einem echten Server erstellt.
Also denke ich das Offensichtliche, dass ich irgendwie etwas falsch gemacht habe und dass der vorkompilierte Header nicht ins Spiel kommt. Ich kann aber was nicht finden.
Unsere Makefiles werden von CMake generiert, sodass ich den Code kopieren kann, der zum Kompilieren des Headers und der Objektdateien verwendet wurde, die sie verwenden.
Erstellen der Kopfzeile:
/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"
eine Objektdatei Kompilieren:
/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 geschätzt werden, auch wenn sie stammen aus den oben Schnipsel nicht direkt zu tun.
Sie haben Glück, ich fand, dass die Verwendung vorkompilierter Header mit GCC sogar den Build verlangsamt. CLANG war vor einiger Zeit besser, aber jetzt scheint es wertlos zu sein, vorkompilierte Header zu verwenden, was MSVC als einzigen Compiler übrig lässt, der davon profitiert. – Lothar