2009-07-16 4 views
11

Назад давно я использовал для использования предварительно скомпилированных заголовков: a. ускорить компиляцию и b. потому что я поддерживал несколько инструментов разработки, таких как CodeWarrior, MPW, VS, ProjectBuilder, gcc, компиляторы Intel и т. д. и т. д.Предварительно скомпилированные заголовки? Мы действительно нуждаемся в них

Теперь у меня есть Mac Pro с 32 ГБ ОЗУ.

Теперь я использую только CMake.

Так что нам действительно нужны предварительно скомпилированные заголовки?

Есть ли очевидные преимущества, которые я просто не вижу/не знаю?

Как можно сделать кросс-платформенный предварительно скомпилированный заголовок? Возможно, это упростит мою жизнь.

+7

Можете ли вы рассказать нам, какие преимущества вы считаете прекомпилированными заголовками, но больше не имеете? – avakar

+0

@avakar - Я не говорю, что у них нет таких же преимуществ, но с системами, ежедневно повышающимися, стоит ли предельное увеличение производительности для головных болей, которые они связаны? – 2009-07-16 15:23:47

+0

@Todd - marginal?!? .. –

ответ

4

Я думаю, что ваш вопрос действительно зависит от размера проекта, который вы компилируете. Есть несколько действительно больших проектов, где прекомпилированные заголовки действительно имеют огромное значение.

Итак, мой ответ: это зависит ..

Но если их использование делает вашу жизнь несчастной по какой-то причине или другой (т.е. переносимости) и ваш проект не невероятно большой .. я бы сказал, пропустите их.

0

Преимущество предварительно скомпилированных заголовков заключается в том, что файлы заголовков огромной системной библиотеки и другие файлы, которые вообще не изменяются или редко, должны быть разобраны только один раз для сборки.

Поскольку все компиляторы C (что я знаю) работают над каждым файлом .c отдельно, пропуская «известную» часть включений может иметь огромное влияние на время компиляции.

Они также не являются проблемой переносимости, вы можете скомпилировать проект с использованием stdafx.h/cpp с GCC просто отлично, единственная проблема заключается в том, что время компиляции может увеличиться, потому что не все в stdafx.h необходимо в каждом сбор единица измерения.

+0

MSVC работает с несколькими исходными файлами физически, но сохраняет их логически раздельными. – MSalters

+0

Вот почему MSVC по-прежнему выигрывает гораздо больше от предварительно скомпилированных заголовков, а затем gcc и clang. Нам нужно отойти от программ компилятора к серверам компиляторов, чтобы всегда был загружен предварительно скомпилированный заголовок. – Lothar

2

Единственное очевидное преимущество - небольшое сокращение времени компиляции. Обычно я их не использую. В большинстве моих проектов время компиляции не так уж плохо (например, обычно менее нескольких минут).

Если ваш проект не огромен, они обычно приносят больше вреда, чем пользы. (Они сильно зависят от компилятора.)

-1

По-прежнему полезно использовать заголовок прекомпиляции по крайней мере по двум причинам:
1) У многих людей нет Mac Pro с 32 ГБ оперативной памяти, счастливый человек!
2) Это способ ограничить включение в * .h
Единственный способ, которым я знаю, сделать кросс-платформенный предварительно скомпилированный заголовок - работать с Qt и его файлом проекта кросс-платформы: PRO-файл!

+2

предварительно скомпилированные заголовки в конечном итоге используют больше бара ... Я не понимаю ваш комментарий. – Marius

+0

Я имею в виду мощную машину, ОЗУ - всего лишь описательный пример ... Очевидно, что оперативная память не делает компиляцию быстрее! – Matthieu

17

Нет такой вещи, как сборка, которая является «достаточно быстрой». Сторонники TDD (Test-Driven Development) будут расстроены, если их сборка займет больше нескольких секунд, потому что она делает поворот в стиле разработки намного медленнее.

Я работал над проектами с часами времени компиляции, которые мы сократили вдвое (или лучше), работая с предварительно скомпилированными заголовками правильно, поэтому преимущество может быть довольно большим, особенно для проектов, которые пренебрегли временем сборки для в то время как.

Однако предпочтительное решение остается тем, что время компиляции никогда не выходит из-под контроля, контролируя физические зависимости кода.

Для получения более подробной информации читайте The Care and Feeding of Pre-compiled Headers

3

Я всегда выключая его. В проектах, над которыми я работал, я столкнулся с большими проблемами, чем с ними. Появилось много тонких ошибок, которые можно было отследить до предварительно скомпилированного заголовка, который по какой-то причине не перекомпилировался. Возможно, это лучше в текущих воплощениях VS.

3

Я решил попробовать это сегодня. Я использую Microsoft Visual C++ 2010.

WIthout precompiled header, общее время компиляции 3.4s. С предварительно скомпилированными заголовками, общее время компиляции 1,5 с. Так что для меня это стоит использовать.

Предварительно скомпилированный заголовок содержит много заголовков boost и stl и windows.h. Общий размер сгенерированного файла с предварительно скомпилированным файлом заголовка (pch) 49 Мбайт.

+2

+1 для реальных данных. –