Nor*_*wap 5 gcc header precompiled-headers precompiled
我正在开发一个必须在多种环境下构建的大型项目,主要是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"
Run Code Online (Sandbox Code Playgroud)
编译目标文件:
/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"
Run Code Online (Sandbox Code Playgroud)
即使它们不是直接来自上面的片段,也可以理解见解.
在 GCC 中使用预编译头文件时需要注意以下几点。首先,必须使用与编译 cpp 文件相同的参数创建预编译头。另外我假设您实际上已经在 AccountMgr.cpp 中包含了预编译头?
尝试使用该-H
标志进行编译,这将输出正在考虑的包含文件。检查是否提到了 pchdef 文件,并查看正在解析哪些其他包含文件。要让 gcc 抱怨无效的 PCH 文件,请考虑使用-Winvalid-pch
.