Рассказ:
Я не могу заставить правильно скомпилированные заголовки работать с опцией gcc -c.
Длинная история:
Ребята, я использую gcc-4.4.1 в Linux, и перед тем, как попробовать скомпилированные заголовки в очень большом проекте, я решил проверить их на простой программе. Они "вроде работают", но я не доволен результатами, и я уверен, что что-то не так с моей настройкой.
Прежде всего, я написал простую программу (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 был создан)
После этого я измерил время компиляции с и без предварительно скомпилированных заголовков:
с пч
$ time g++ -I. -include pre.h main.cpp
real 0m0.128s
user 0m0.088s
sys 0m0.048s
без шт
$ 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:
с пч
$ time g++ -I. -include pre.h -c foo.cpp
real 0m0.357s
user 0m0.348s
sys 0m0.012s
без шт
$ time g++ -I. -c foo.cpp
real 0m0.330s
user 0m0.292s
sys 0m0.044s
Это довольно странно, похоже, что скорости вообще нет! (Я запускал тайминги несколько раз). Оказалось, что в этом случае прекомпилированные заголовки вообще не использовались, я проверил это с опцией -H (вывод «g ++ -I. gch вообще).
Что я делаю не так?