ショートストーリー:
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。-includepre.h-cfoo.cpp-H」の出力にはpre.hが表示されませんでした。まったくgch)。
私は何が間違っているのですか?