pch (stdafx.h) in cross-platform projects
От: dream_cast Россия  
Дата: 16.08.21 23:28
Оценка: :)
Коллеги, а используете ли вы subj в своих проектах?
Т.е. есть:

CrossPlatform.cpp
Начинается ли он с:
#include "stdafx.h" // some other "pch.h" (for example) ?

-------------------------------
stdafx.h // "pch.h"
#ifdef __IS_VS_COMPILER // псевдо код

#include <vector>
#include <list>
........... (еще 10ки хидеров)

#endif

-------------------------------

Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше.
Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.

Я к тому, хорошая ли это практика или нет?

Те opensource проекты что встречались не используют такого (или просто не попадались).
Вот и думаю, это "плохо так делать" или все же имеет смысл.
Re: pch (stdafx.h) in cross-platform projects
От: dream_cast Россия  
Дата: 16.08.21 23:35
Оценка:
И да, вопрос про "тяжелые проекты" (час и более сборка).
Для 5мин понятно что не актуально.
Re: pch (stdafx.h) in cross-platform projects
От: velkin Земля  
Дата: 17.08.21 02:40
Оценка:
Здравствуйте, dream_cast, Вы писали:

_>Коллеги, а используете ли вы subj в своих проектах?


Я как с Visual Studio ушёл больше такого и не видел.
Re: pch (stdafx.h) in cross-platform projects
От: Chorkov Россия  
Дата: 17.08.21 08:01
Оценка:
Здравствуйте, dream_cast, Вы писали:

_>Коллеги, а используете ли вы subj в своих проектах?

_>Т.е. есть:

_>CrossPlatform.cpp

_>Начинается ли он с:
_>#include "stdafx.h" // some other "pch.h" (for example) ?

_>-------------------------------

_>
_>stdafx.h // "pch.h"
_>#ifdef __IS_VS_COMPILER // псевдо код

_>#include <vector>
_>#include <list>
_>........... (еще 10ки хидеров)

_>#endif
_>

_>-------------------------------

_>Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше.

_>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.

_>Я к тому, хорошая ли это практика или нет?


_>Те opensource проекты что встречались не используют такого (или просто не попадались).

_>Вот и думаю, это "плохо так делать" или все же имеет смысл.

Не Используем.

Минимизация зависимостей (включаются только заголовочные файлы, что реально используются, forward-декларации классов, вместо включения заголовков и т.д.) дает больший эффект (на нашем проекте) .
Возможно, потому что это преимущественно не-GUI проект, т.е. нет никаких тяжеленных Qt/MFC/windows.h, а заголовочные файлы используемых библиотек (mkl/superlu/sundials/libxml/...) очень легкие.
Re[2]: pch (stdafx.h) in cross-platform projects
От: Skorodum Россия  
Дата: 17.08.21 09:19
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Минимизация зависимостей (включаются только заголовочные файлы, что реально используются, forward-декларации классов, вместо включения заголовков и т.д.) дает больший эффект (на нашем проекте) .

C>Возможно, потому что это преимущественно не-GUI проект, т.е. нет никаких тяжеленных Qt/MFC/windows.h, а заголовочные файлы используемых библиотек (mkl/superlu/sundials/libxml/...) очень легкие.
MFC/windows.h — не тяжелые, там шаблонов же нет. В Qt их тоже мало. "Тяжелые" для компиляции это всякие бусты.
Re: pch (stdafx.h) in cross-platform projects
От: Videoman Россия https://hts.tv/
Дата: 17.08.21 09:27
Оценка: 15 (4) +1
Здравствуйте, dream_cast, Вы писали:

_>Я к тому, хорошая ли это практика или нет?

_>...

_>Те opensource проекты что встречались не используют такого (или просто не попадались).

_>Вот и думаю, это "плохо так делать" или все же имеет смысл.

Всё очень сильно зависит от твоих проектов, насколько там много общих инклюдов подключаемых в cpp. Если выгода в скорости есть, то нужно использовать. Мы, например, используем в своих проектах. Единственное что нужно помнить: нужно сконфигурировать проект так, что бы он без проблем собирался и с PCH и без них. У меня просто ко всем проектам где это нужно подключается property sheet где стоит опция force include file (/FI) stdafx.h. В самих cpp ничего нет.
Re[2]: pch (stdafx.h) in cross-platform projects
От: dream_cast Россия  
Дата: 17.08.21 09:37
Оценка:
Здравствуйте, Videoman, Вы писали:


V>Всё очень сильно зависит от твоих проектов, насколько там много общих инклюдов подключаемых в cpp. Если выгода в скорости есть, то нужно использовать.

Много. И выгода очень даже есть. Потому у задал такой вопрос.

V>Мы, например, используем в своих проектах. Единственное что нужно помнить: нужно сконфигурировать проект так, что бы он без проблем собирался и с PCH и без них.

Это понятно.

V>У меня просто ко всем проектам где это нужно подключается property sheet где стоит опция force include file (/FI) stdafx.h. В самих cpp ничего нет.

О! Даже не знал про такую опцию (век живи век учись).
Так действительно лучше.
Спасибо за наводку.
Re: pch (stdafx.h) in cross-platform projects
От: bnk СССР http://unmanagedvisio.com/
Дата: 17.08.21 10:23
Оценка: 2 (1)
Здравствуйте, dream_cast, Вы писали:

_>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.


Все там есть, RTFM
> g++ -c stdafx.h -o stdafx.h.gch

_>Я к тому, хорошая ли это практика или нет?

Да нормальная практика.
Целесообразность зависит от проекта, может оказаться что наоборот сборка будет медленнее.

Когда я на плюсах писал, IncrediBuild давал эффект на порядок больше.
Теперь компилятор Микрософта давно научился в несколько потоков собирать (на одном компе)
Если для тебя скорость сборки критична надеюсь у тебя галочка стоит на параллельную сборку.
Re: pch (stdafx.h) in cross-platform projects
От: AeroSun  
Дата: 19.08.21 13:27
Оценка:
Здравствуйте, dream_cast, Вы писали:

_>Для Win проектов это дает до x3 скорости сборки (на моих проектах), может и больше.


Чем больше проект — тем больше скорости даёт

_>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.


Даёт, но с использованием ccache это не так сильно заметно (надеюсь уже не осталось динозавров которые без него с++ на линуске используют?)

_>Я к тому, хорошая ли это практика или нет?


Это необходимая практика, как и ccache, incredibuild и в будущем — модули. Если кто-то утверждает обратное — это автоматом означает небольшой опыт плюсовика.

_>Те opensource проекты что встречались не используют такого (или просто не попадались).


99% opensource проектов — это лютое гавно, как по рахитектуре так и по коду

_>Вот и думаю, это "плохо так делать" или все же имеет смысл.


Разберись когда, для чего и как оно применяется, это необходимые инструменты для работы над большими проектами
Отредактировано 19.08.2021 13:28 AeroSun . Предыдущая версия .
Re[2]: pch (stdafx.h) in cross-platform projects
От: B0FEE664  
Дата: 24.08.21 11:44
Оценка: 3 (1)
Здравствуйте, AeroSun, Вы писали:

_>>Для Mac & Lin не дает (pch там вроде как и не научились) но и downgrade не дает.

AS>Даёт, но с использованием ccache это не так сильно заметно (надеюсь уже не осталось динозавров которые без него с++ на линуске используют?)

Прочитал про ccache и не понял в чём его смысл. В preprocessor mode? В direct mode и так всё работает силами make+компилятор: нет смысла компилировать уже скомпилированное, а изменения отслеживаются по времени изменения файлов.

Мне кажется, что на обычном Makefile реализовать preprocessor mode не сложно. Хотя... Как ccache подменяет инклюды скомпилированным хэшом?
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.