Нет, они не существуют.
я знаю, что команда C# рассматривала их однажды (или по крайней мере Eric Lippert был) - вместе с дополнительными конструкторами и операторами (они могут требовать времени для получения головы вокруг, но спокойны...), Однако, я не видел доказательства, что они будут частью C# 4.
РЕДАКТИРОВАНИЕ: Они не появились в C# 5, и по состоянию на июль 2014 не похоже, что это будет в C# 6 также.
Eric Lippert , Основной Разработчик в команде компилятора C# в Microsoft в течение ноября 2012, занесенного в блог об этом в октябре 2009:
Единственное потенциальное преимущество предварительно скомпилированных заголовков состоит в том, что если ваши сборки слишком медленные, предварительно скомпилированные заголовки могут их ускорить. Возможные минусы:
Больше зависимостей Makefile для исправления; если они ошибаются, вы быстро создаете не то. Плохо.
В принципе, не каждый заголовок можно предварительно скомпилировать. (Подумайте о том, чтобы поставить некоторые #define перед #include.) Итак, в каких случаях gcc действительно работает правильно? Насколько вы хотите доверять этой новейшей функции.
Если ваши сборки достаточно быстрые, нет причин использовать предварительно скомпилированные заголовки . Если ваши сборки слишком медленные, я бы рассмотрел
Я не могу разговаривать с GNU / gcc / linux, но я имел дело с предварительно скомпилированными заголовками в vs2005:
Плюсы:
Минусы:
Интерфейс кэширования ccache для gcc, g ++, gfortran, ... у меня отлично работает. Как говорится на его веб-сайте
ccache - это кеш компилятора. Он действует как кэширующий препроцессор для C / C ++ компиляторы, используя компилятор -E переключатель и хеш, чтобы определить, когда компиляция может быть удовлетворена из кеш. Это часто дает от 5 до 10 ускорение в раз при обычных компиляциях.
В Debian / Ubuntu просто выполните ' apt-get install ccache
' и создайте программные ссылки, скажем, в / usr / local / bin
с именами gcc
, g ++
, gfortran
, c ++
, ... которые указывают на / usr / bin / ccache
.
[ РЕДАКТИРОВАТЬ ] Чтобы сделать это более явным в ответ на некоторые ранние комментарии: Это обеспечивает по существу предварительно скомпилированные заголовки и исходные коды путем кэширования большей части этапа компиляции. Таким образом, он использует идею, аналогичную предварительно скомпилированным заголовкам, и развивает ее. Ускорение может быть значительным - от 5 до 10, как указано на сайте.
Для простого C я бы избегал предварительно скомпилированных заголовков. Как вы говорите, они потенциально могут вызвать проблемы, а время предварительной обработки действительно мало по сравнению с обычной компиляцией.
Для C ++ предварительно скомпилированные заголовки потенциально могут сэкономить много времени, поскольку заголовки C ++ часто содержат большой код шаблона, компиляция которого требует больших затрат . У меня нет практического опыта работы с ними, поэтому я рекомендую вам измерить, сколько экономии на компиляции вы получите в своем проекте. Для этого скомпилируйте весь проект с предварительно скомпилированными заголовками один раз, затем удалите один объектный файл и измерьте, сколько времени потребуется для перекомпиляции этого файла.
В документации GNU gcc обсуждаются возможные подводные камни с предварительно скомпилированными заголовками.
Я использую PCH в проекте Qt, который использует cmake в качестве системы сборки, и это экономит много времени. Я взял несколько скриптов cmake для PCH, которые требовали некоторой настройки, так как они были довольно старыми, но в целом их было проще настроить, чем я ожидал. Я должен добавить, я не особо разбираюсь в cmake.
Сейчас я включаю большую часть Qt (QtCore, QtGui, QtOpenGL) и сразу несколько стабильных заголовков.
Плюсы:
Минусы: