我正在開發一個大型項目,必須在多個環境下構建,主要是linux/gcc和windows/msvc。爲了加速構建,我們使用預編譯頭文件。在gcc上沒有預編譯頭文件的加速(但與Visual Studio大加速)
Windows實現非常高效:在我的四核超線程i7構建時間從9分鐘下降到1.5分鐘。然而,使用預編譯頭文件似乎並沒有提高性能:在這兩種情況下,它在同一臺計算機上的虛擬框下22分鐘內構建,或者在真實服務器上約40分鐘。
所以我想明顯的是,我不知何故有什麼錯,並且預編譯的頭文件沒有插入。但是我找不到。
我們的Makefiles是由CMake生成的,所以我可以複製粘貼用於編譯頭文件的代碼和使用它們的對象文件。
創建報頭:
/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"
編譯的對象文件:
/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"
見解是理解的,即使它們不直接從上面的代碼段中獲得。
很幸運,我發現在GCC中使用預編譯頭文件甚至會降低構建速度。 CLANG在前段時間表現較好,但現在似乎使用預編譯頭文件毫無價值,使得MSVC成爲唯一受益於它的編譯器。 – Lothar