Pracuję nad dużym projektem, który musi budować w wielu środowiskach, głównie linux/gcc i windows/msvc. Aby przyspieszyć kompilację, używamy prekompilowanych nagłówków.Bez przyspieszenia z prekompilowanymi nagłówkami na gcc (ale dużym przyspieszeniem w visual studio)
Implementacja systemu Windows jest bardzo wydajna: na moim czterordzeniowym systemie Hyperthreaded czas budowy i7 obniża się z 9 minut do 1,5 minuty. Jednak użycie prekompilowanych nagłówków nie poprawia wydajności: w obu przypadkach buduje się w 22 minuty pod wirtualnym pudełkiem na tym samym komputerze lub około 40 minut na prawdziwym serwerze.
Więc myślę, że jest oczywiste, że jakoś coś złego i że prekompilowany nagłówek nie jest kopiący. Nie mogę jednak znaleźć.
Nasze pliki Makefile są generowane przez CMake, więc mogę skopiować wklej kod użyty do kompilacji nagłówka i plików obiektów, które ich używają.
Tworzenie nagłówka:
/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"
Kompilowanie pliku obiektu:
/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 są doceniane, nawet jeśli nie bezpośrednio wynikają z powyższych fragmentów.
Masz szczęście, odkryłem, że używanie prekompilowanych nagłówków z GCC nawet spowalnia kompilację. CLANG był lepszy jakiś czas temu, ale teraz wydaje się bezwartościowy przy użyciu prekompilowanych nagłówków, pozostawiając MSVC jako jedyny kompilator, który czerpie z niego korzyści. – Lothar