短篇故事:
我无法使用 gcc -c 选项使预编译的头文件正常工作。
很长的故事:
伙计们,我在 Linux 上使用 gcc-4.4.1,在一个非常大的项目中尝试预编译头文件之前,我决定在简单的程序上测试它们。他们“有点工作”,但我对结果不满意,我确信我的设置有问题。
首先,我编写了一个简单的程序(main.cpp)来测试它们是否有效:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>
int main()
{
return 0;
}
然后我创建了预编译的头文件 pre.h(在同一目录中),如下所示:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>
...并编译它:
$ g++ -I. pre.h
(创建了 pre.h.gch)
之后,我测量了使用和不使用预编译头文件的编译时间:
与 pch
$ time g++ -I. -include pre.h main.cpp
real 0m0.128s
user 0m0.088s
sys 0m0.048s
没有 pch
$ time g++ -I. main.cpp
real 0m0.838s
user 0m0.784s
sys 0m0.056s
到现在为止还挺好!快了将近 7 倍,令人印象深刻!现在让我们尝试一些更现实的东西。我所有的源代码都是用 -c 选项构建的,出于某种原因,我不能让 pch 很好地使用它。您可以通过以下步骤重现此...
我创建了测试模块 foo.cpp 如下:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/type_traits.hpp>
int whatever()
{
return 0;
}
以下是我尝试使用和不使用 pch 构建模块 foo.cpp 的时间:
与 pch
$ time g++ -I. -include pre.h -c foo.cpp
real 0m0.357s
user 0m0.348s
sys 0m0.012s
没有 pch
$ time g++ -I. -c foo.cpp
real 0m0.330s
user 0m0.292s
sys 0m0.044s
这很奇怪,看起来根本没有加速!(我跑了几次计时)。事实证明,在这种情况下根本没有使用预编译的头文件,我用 -H 选项检查了它(“g++ -I. -include pre.h -c foo.cpp -H”的输出没有列出 pre.h。完全没有gch)。
我究竟做错了什么?