短篇小說:gcc預編譯頭奇怪的行爲與-c選項
我不能使預編譯頭與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;
}
這裏是我的嘗試與構建模塊Foo.cpp中和的時機無PCH:
與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)。
我在做什麼錯?