我正在做一个必须在多个环境下构建的大型项目,主要是 linux/gcc 和 windows/msvc。为了加快构建速度,我们使用预编译的头文件。
Windows 实现非常高效:在我的四核超线程 i7 上,构建时间从 9 分钟下降到 1.5 分钟。然而,使用预编译的头文件似乎并没有提高性能:在这两种情况下,它在同一台计算机上的虚拟盒子下构建需要 22 分钟,或者在真实服务器上大约需要 40 分钟。
所以我在想很明显,我不知何故出了点问题,预编译的头文件没有启动。但是我找不到什么。
我们的 Makefile 是由 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"
见解是值得赞赏的,即使它们不是直接来自上面的片段。