Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше.
Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.
Я к тому, хорошая ли это практика или нет?
Те opensource проекты что встречались не используют такого (или просто не попадались).
Вот и думаю, это "плохо так делать" или все же имеет смысл.
Здравствуйте, dream_cast, Вы писали:
_>Коллеги, а используете ли вы subj в своих проектах? _>Т.е. есть:
_>CrossPlatform.cpp _>Начинается ли он с: _>#include "stdafx.h" // some other "pch.h" (for example) ?
_>------------------------------- _>
_>-------------------------------
_>Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше. _>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.
_>Я к тому, хорошая ли это практика или нет?
_>Те opensource проекты что встречались не используют такого (или просто не попадались). _>Вот и думаю, это "плохо так делать" или все же имеет смысл.
Не Используем.
Минимизация зависимостей (включаются только заголовочные файлы, что реально используются, forward-декларации классов, вместо включения заголовков и т.д.) дает больший эффект (на нашем проекте) .
Возможно, потому что это преимущественно не-GUI проект, т.е. нет никаких тяжеленных Qt/MFC/windows.h, а заголовочные файлы используемых библиотек (mkl/superlu/sundials/libxml/...) очень легкие.
Здравствуйте, Chorkov, Вы писали:
C>Минимизация зависимостей (включаются только заголовочные файлы, что реально используются, forward-декларации классов, вместо включения заголовков и т.д.) дает больший эффект (на нашем проекте) . C>Возможно, потому что это преимущественно не-GUI проект, т.е. нет никаких тяжеленных Qt/MFC/windows.h, а заголовочные файлы используемых библиотек (mkl/superlu/sundials/libxml/...) очень легкие.
MFC/windows.h — не тяжелые, там шаблонов же нет. В Qt их тоже мало. "Тяжелые" для компиляции это всякие бусты.
Здравствуйте, dream_cast, Вы писали:
_>Я к тому, хорошая ли это практика или нет? _>...
_>Те opensource проекты что встречались не используют такого (или просто не попадались). _>Вот и думаю, это "плохо так делать" или все же имеет смысл.
Всё очень сильно зависит от твоих проектов, насколько там много общих инклюдов подключаемых в cpp. Если выгода в скорости есть, то нужно использовать. Мы, например, используем в своих проектах. Единственное что нужно помнить: нужно сконфигурировать проект так, что бы он без проблем собирался и с PCH и без них. У меня просто ко всем проектам где это нужно подключается property sheet где стоит опция force include file (/FI) stdafx.h. В самих cpp ничего нет.
V>Всё очень сильно зависит от твоих проектов, насколько там много общих инклюдов подключаемых в cpp. Если выгода в скорости есть, то нужно использовать.
Много. И выгода очень даже есть. Потому у задал такой вопрос.
V>Мы, например, используем в своих проектах. Единственное что нужно помнить: нужно сконфигурировать проект так, что бы он без проблем собирался и с PCH и без них.
Это понятно.
V>У меня просто ко всем проектам где это нужно подключается property sheet где стоит опция force include file (/FI) stdafx.h. В самих cpp ничего нет.
О! Даже не знал про такую опцию (век живи век учись).
Так действительно лучше.
Спасибо за наводку.
Здравствуйте, dream_cast, Вы писали:
_>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.
Все там есть, RTFM
> g++ -c stdafx.h -o stdafx.h.gch
_>Я к тому, хорошая ли это практика или нет?
Да нормальная практика.
Целесообразность зависит от проекта, может оказаться что наоборот сборка будет медленнее.
Когда я на плюсах писал, IncrediBuild давал эффект на порядок больше.
Теперь компилятор Микрософта давно научился в несколько потоков собирать (на одном компе)
Если для тебя скорость сборки критична надеюсь у тебя галочка стоит на параллельную сборку.
Здравствуйте, dream_cast, Вы писали:
_>Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше.
Чем больше проект — тем больше скорости даёт
_>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.
Даёт, но с использованием ccache это не так сильно заметно (надеюсь уже не осталось динозавров которые без него с++ на линуске используют?)
_>Я к тому, хорошая ли это практика или нет?
Это необходимая практика, как и ccache, incredibuild и в будущем — модули. Если кто-то утверждает обратное — это автоматом означает небольшой опыт плюсовика.
_>Те opensource проекты что встречались не используют такого (или просто не попадались).
99% opensource проектов — это лютое гавно, как по рахитектуре так и по коду
_>Вот и думаю, это "плохо так делать" или все же имеет смысл.
Разберись когда, для чего и как оно применяется, это необходимые инструменты для работы над большими проектами
Здравствуйте, AeroSun, Вы писали:
_>>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает. AS>Даёт, но с использованием ccache это не так сильно заметно (надеюсь уже не осталось динозавров которые без него с++ на линуске используют?)
Прочитал про ccache и не понял в чём его смысл. В preprocessor mode? В direct mode и так всё работает силами make+компилятор: нет смысла компилировать уже скомпилированное, а изменения отслеживаются по времени изменения файлов.
Мне кажется, что на обычном Makefile реализовать preprocessor mode не сложно. Хотя... Как ccache подменяет инклюды скомпилированным хэшом?