Visual studio как отключить pch
Прежде всего, я хочу сказать, что я читал о прекомпилированных заголовках, и я понимаю, что это оптимизация, которая экономит время для компиляции заголовков снова и снова на каждой построенной.
Я читаю документацию об усилении, и я вижу, что в инструкциях они говорят:
В свойствах конфигурации> C/C++> Предварительно скомпилированные заголовки измените использование предварительного скомпонованного заголовка (/Yu), чтобы не использовать предварительно скомпилированные заголовки
И затем они объясняют это:
спросил(а) 2021-01-09T20:29:36+03:00 10 месяцев, 2 недели назадНет проблем с использованием Boost с предварительно скомпилированными заголовками; эти инструкции просто избегают прекомпилированных заголовков, потому что для этого потребуются изменения в Visual Studio для исходного кода, используемого в примерах.
Первоначально комментарий, но я могу также опубликовать его. Примечание: это относится к VC++:
Смелое предложение - это их способ сказать, что образцы не следуют мантре единой модели использования-этого-в-заголовке-для-pch-поколения. IOW, их образцы не совместимы с PCH, но вы можете использовать pch с повышением в своих проектах, если они правильно настроены.
Вы бы отключили их по разным причинам. Некоторые исходные модули, в частности, от сторонних сторон, не следуют модели PCH с включением "the-pch-through-header" с самого начала. Их образцы являются таким кодом (и, следовательно, советуют отключать их для своих образцов). Иногда исходные файлы требуют разных конфигураций препроцессора только для этих файлов, а не для всех файлов int it project; еще одна причина отключить PCH для этих файлов.
Обычно вы используете пару source/header для создания "One"; предварительно скомпилированное изображение заголовка. Этот заголовочный файл обычно включает:
Любые системные стандартные заголовки lib, используемые вашим проектом Сторонние заголовки SDK Почти все, что НЕ является активной разработкой для вашего проекта.
Вкратце (трудно поверить), <boost> говорит вам, что их образцы не настроены, как описано выше, и поэтому вы должны отключить PCH при их создании.
ответил(а) 2021-01-09T20:29:36+03:00 10 месяцев, 2 недели назадКогда вы используете предварительно скомпилированные заголовки, вам нужно сделать что-то вроде:
Там немного больше, чем история. Чтобы сделать предварительно скомпилированные заголовки работоспособными, вы хотите включить точно такой же набор заголовков точно в одном порядке в каждом исходном файле.
Это означает, что каждый исходный файл обычно включает в себя множество заголовков, которые ему действительно не нужны. Это, в свою очередь, означает, что если вы не используете предварительно скомпилированные заголовки, вы в итоге получаете компиляцию, которая намного медленнее, чем если бы вы ничего не сделали для поддержки предварительно скомпилированных заголовков.
Прежде всего, я хочу сказать, что я читал о предварительно скомпилированных заголовках, и я понимаю, что это оптимизация, которая экономит мне время многократной компиляции заголовков на каждой сборке.
Я читаю документацию Boost и вижу, что в инструкциях говорится:
В Свойства конфигурации> C / C ++> Предварительно скомпилированные заголовки измените параметр Использовать предварительно скомпилированный заголовок (/ Yu) на Не использовать предварительно скомпилированные заголовки.
И тогда они объясняют это:
Нет проблем с использованием Boost с предварительно скомпилированными заголовками; эти инструкции просто избегают предварительно скомпилированных заголовков, потому что для этого потребуются специфические для Visual Studio изменения исходного кода, используемого в примерах.
Решение
Первоначально комментарий, но я могу также опубликовать его. Примечание: это относится к VC ++:
Вы бы отключили их по разным причинам. Некоторые исходные модули, особенно сторонние, не следуют модели PCH, включающей в себя «pch-through-header» с самого начала. Их образцы представляют собой такой код (и, следовательно, советуют отключить их для их образцов). Иногда исходные файлы требуют разных конфигураций препроцессора только для этих файлов, а не для всех файлов в проекте; Еще одна причина отключить PCH для этих файлов.
Вы обычно используете пара источник / заголовок для генерации «Единого»; предварительно скомпилированное изображение заголовка. Этот заголовочный файл обычно включает в себя:
- Любые системные стандартные заголовки lib, используемые вашим проектом
- Сторонние заголовки SDK
- Почти все остальное, что НЕ находится в активной разработке для ваш проект.
Короче говоря (трудно поверить), <boost> говорит, что их образцы не настроены, как описано выше, и поэтому вы должны включить PCH от при их строительстве.
Другие решения
Когда вы используете предварительно скомпилированные заголовки, вам нужно сделать что-то вроде:
В этой истории есть нечто большее, чем просто. Чтобы скомпилированные заголовки работали Что ж, Вы хотите включить в каждый исходный файл один и тот же набор заголовков в абсолютно одинаковом порядке.
Это означает, что каждый исходный файл обычно содержит много заголовков, которые ему на самом деле не нужны. Это, в свою очередь, означает, что если вы не используя предварительно скомпилированные заголовки, вы получите компиляцию, которая гораздо медленнее, чем если бы вы вообще ничего не сделали для поддержки предварительно скомпилированных заголовков.
Так что вы бы отключили его, если не хотите редактировать все исходные файлы.
Прошу перестать придумывать новые способы инклюдить PCH.H
Строка включения PCH.H должна быть первой в .CPP файле и должна выглядеть, как:
Отключение его полностью не принимается. PCH используется другими разработчиками проекта, и ваш код БУДЕТ исправлен, потому в настройках прописано использование РСН, и иначе он не скомпилится.
Неверное написание "stdafx.h", "gb/pch.h" не принимается. Ваш код БУДЕТ исправлен, потому что иначе он не скомпилится.
Если у вас не находит pch.h, и вы не используете проект CMake, будьте добры прописать папку gameboost/ и gameboost/gb/ в пути инклюдов. Если вы используете проект CMake - эти настройки уже сделаны, всё работает само собой.
pch превращает библиотеку независимых модулей в один тупой неюзабельный монолит. печально.
EvilSpirit
чёчё ??
нажал на кнопу.. бац и сразу запустилось..
не надо инклюды прописывать.. Это ж только для cpp а не для h
ksacvet777
> Это ж только для cpp а не для h
80% инклюдов из pch нужны уже в .h
я не спорю, я констатирую. модули уже не такие модули. библиотека - уже не библиотека, где можно взять любую книгу по нужному вопросу, тебе в ней дают книгу с цепочкой на привязи, которую - как хочешь, так и реж.
EvilSpirit
Ну .. на крайняк потом можно ввести макрос .. например GB_USE_PCH .
Я делал так:
В файле ks_inc_c.h - подключение всех си либ.
В файле ks_inc_cpp.h - подключение всех си++ либ.
м.. не то чтобы всех.. просто основных . .самых самых.
Блин, давайте сделаем правило, что я должен обязательно перед коммитом три раза кувыркнуться, иначе не скомпилится :)
Если у меня, допустим, код компилируестя безо всяких бустов и pch, то почему у кого-то не скомпилируется - объясните. Кажется одмины уже забывают, для чего вообще нужна либа и отрываются как хотят.
Zefick
> Блин, давайте сделаем правило,
А давайте сделаем правило, что каждый пишет как хочет, подключает что хочет, и проект не нужен вообще?
Давайте я накачаю за 15 мин разносортных либ из интернета, скажу вот вам новый геймбуст, компильте его как хотите.
Идея сделать одинаково и удобно всем.
Чтоб компилилось одинаково с одними и теми же настройками. Для этого настроен CMake, пользуйтесь.
Не нравится CMake? Возьмите на себя обязанность постоянно обновлять проект студии и положите его в новую папку, например projects/ это означает все новые добавления и настройки должны в разумный срок попадать в этот проект, вашими усилиями. Вероятно все борцы против PCH откажутся ;)
PCH нужен для тех, кто компилит с включенным Boost.
Отключить его, не сломав не вижу возможности.
kvakvs
> Для этого настроен CMake, пользуйтесь.
Пользователям то же самое скажете? Мне зачем ваш CMake впёрся, если свои исходники я и без него могу скомпилировать? А чужие уж как-нибудь тоже запущу, если понадобится, но пока только смотреть и можно.
> Возьмите на себя обязанность постоянно обновлять проект студии
Какой студии? Я ей уже года два не пользуюсь. Что значит эта фраза?
Один раз сгенерил и пользуйся уже с новыми настройками.
Но я понимаю, надо сделать по своему, а потом устраивать срач с теми, кто старается сделать удобно для всех.
> > Возьмите на себя обязанность постоянно обновлять проект студии
> Какой студии? Я ей уже года два не пользуюсь. Что значит эта фраза?
Можно было в прошлом ответе написать чем же именно и не ждать этого вопроса? Так чем же?
Кто не хочет PCH, просто прописывает в инклюд пути папку nopch/ с пустым файлом, остальные получают из CMake или прописывают вручную папку pch/
kvakvs
> Не вижу никаких причин городить собственные солюшены и проекты.
Ну хочу я сделать свой солюшн, что такого. Может у меня вообще свой мейкфайл, руками написанных, кому какое дело. Я же не заставляю никого им пользоваться, (в отличие от). Я исходники коммичу, а дальше пусть уже люди хоть в свои проекты под них делают, хоть в CMake вставляют. Объясните почему если не заинклюдить pch, то файл не скомпилируетя?
> Так чем же?
Если это важно, то MinGW, но вообще мы же под любой компилятор вроде делаем?
Zefick
> Если это важно, то MinGW, но вообще мы же под любой компилятор вроде делаем?
Да, стараемся.
Поэтому я настроил CMake :)
Когда я собираю свое решение c ++ в Visual Studio, он жалуется на отсутствие файла xxxxx.pch. Есть ли параметр, который мне не хватает, чтобы вернуть предварительно скомпилированные заголовки?
Вот точная ошибка для полноты:
Вы должны предоставить больше информации. какую именно ошибку вы получаете? как настроен ваш проект? Просто простая перестройка все исправила мою проблему.ПРИМЕЧАНИЕ. Более поздние версии IDE могут использовать «pch» вместо «stdafx» в именах по умолчанию для связанных файлов. Может быть необходимо заменить pch на stdafx в инструкциях ниже. Я извиняюсь. Это не моя вина.
- Щелкните правой кнопкой мыши свой проект в обозревателе решений.
- Нажмите Свойства в нижней части раскрывающегося меню.
- В верхнем левом углу страницы свойств выберите «Все конфигурации» в раскрывающемся меню.
- Откройте дерево C / C ++ и выберите «Предварительно скомпилированные заголовки».
- Предварительно скомпилированный заголовок: выберите «Использовать» (/ Yu)
- Заполните поле «Файл скомпилированного заголовка». Стандарт это stdafx.h
К счастью 13. Скрестите пальцы и нажмите Build.
Я не знал, что stdafx.cpp должен иметь разные настройки. Отличный ответ. Это должен быть принятый ответ, так как в другом нет шагов 10 и 11. Спасибо! Спасибо, сэр! Возвращаясь к своим корням C / C ++ r для нового проекта, и я чувствую себя немного спамомИспользование предварительно скомпилированного заголовка (pch) представляет собой двухэтапный процесс.
На первом этапе вы компилируете файл-заглушку (в VS200x он обычно называется stdafx.cpp . Используются более новые версии pch.cpp .). Этот стаб-файл косвенно включает в себя только те заголовки, которые вы хотите предварительно скомпилировать. Как правило, один маленький заголовок (обычно stdafx.h или pch.hpp ) перечисляет стандартные заголовки, такие как <iostream> и <string> , и это затем включается в файл-заглушку. Компиляция этого создает файл .pch.
На шаге 2 ваш фактический исходный код содержит тот же маленький заголовок, что и на шаге 1, что и первый заголовок. Когда компилятор встречает этот специальный заголовок, компилятор читает соответствующий файл .pch. Это означает, что нет необходимости (пере) компилировать эти стандартные заголовки каждый раз.
В вашем случае кажется, что шаг 1 не выполняется. Заглушка все еще присутствует? В вашем случае это, вероятно, будет xxxxx.cpp . Это должен быть файл, который скомпилирован /Yc:xxxxx.pch , так как это флаг компилятора, указывающий, что это шаг 1 процесса PCH. Если xxxxx.cpp он присутствует и является таким файлом-заглушкой, то, вероятно, ему не хватает /Yc: опции компилятора.
тогда, вероятно, отсутствует опция / Yc: compiler. Кстати, эта опция находится на страницах свойств проекта / Свойства конфигурации / C-C ++ / Предварительно скомпилированные заголовкиУбедитесь, что у вас есть xxxxx.cpp в вашем проекте
Скомпилируйте xxxxx.cpp с флагом / Yc ( Создать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши xxxxx.cpp -> Свойства -> Скомпилированные заголовки -> Создать )
Скомпилируйте все остальные файлы с флагом / Yu ( Использовать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши на проекте -> Свойства -> Предварительно скомпилированные заголовки -> Использовать )
Читайте также: