В чем разница между созданием предварительно скомпилированного заголовка (/ Yc) и использованием предварительно скомпилированного заголовка (/ Yu) в Visual Studio?

Я прочитал документацию в MSDN, но в конце концов я не получил четкого представления, в чем конкретно заключается практическая разница между ними. Оба, похоже, требуют добавления stdafx.h в начало каждого файла * .cpp.

Я использую VS2008.

Может ли кто-нибудь помочь прояснить ситуацию?


person sashoalm    schedule 30.07.2012    source источник
comment
Ссылка на документацию может быть актуальной. Тривиальный абсурдный ответ будет таким: один используется для создания предварительно скомпилированного заголовка, другой - для использования его (т.е. один для того, чтобы компилятор прочитал обычные заголовки и генерируют предварительно скомпилированный заголовок, другой - для компилятора, чтобы не создавать предварительно скомпилированный заголовок, а использовать его.   -  person David Rodríguez - dribeas    schedule 30.07.2012


Ответы (2)


Что ж, я думаю, что вы должны сначала понять назначение предварительно скомпилированных заголовков. Например, в больших проектах обработка всех заголовков, требуемых для одного клиентского расширения, может занять много времени, поэтому некоторые люди предпочитают распространять файлы .pch вместе со своими библиотеками. Чтобы сгенерировать файлы .pch, вы используете флаг компилятора /Yc, и человек, который хочет использовать вашу библиотеку, установит флаг /Yu. См. здесь и здесь.

person Mihai Todor    schedule 30.07.2012
comment
Вы не должны получать файлы PCH из библиотеки. Во-первых, большая часть кода использует несколько библиотек, но компилятор может читать только один PCH. С другой стороны, заголовки, используемые во время разработки библиотеки, вероятно, сильно отличаются от заголовков, необходимых для потребительского кода. - person Ben Voigt; 22.07.2016
comment
@BenVoigt В самом деле, это, вероятно, не обычная практика. Я видел, как это делалось в жестко закрытой банковской среде, где кодовая база была огромной, а клиентские расширения были строго заимствованы из материалов, поставляемых этой компанией. Не стесняйтесь предлагать правку, если считаете, что этот ответ нуждается в улучшении. - person Mihai Todor; 23.07.2016

Краткое описание того, как использовать файлы PCH в Visual Studio:

  • Все файлы cpp в проекте должны включать stdafx.h (вы можете изменить это на что-то другое, если хотите)
  • Выберите проект в обозревателе решений и в Properties -> C++ -> Precompiled Headers установите для параметра «Создать / использовать предварительно скомпилированные заголовки» значение «Использовать». Нажмите "Применить"
  • Пока страницы свойств все еще отображаются, выберите stdafx.cpp в обозревателе решений и установите значение «Создать».
person the_mandrill    schedule 30.07.2012
comment
В дополнение к приведенному выше краткому описанию для каждого проекта vc ++ в вашем решении, где вы используете предварительно скомпилированные заголовки, вы должны выбрать файл StdAfx.cpp и установить для свойства Precompiled Header значение Create (/ Yc). Затем выберите все другие файлы cpp в этом проекте (выделите их все как группу с помощью Shift + мышь) и за один раз установите для них свойство Precompiled Header на Use (/ Yu). - person Philip Beck; 17.04.2019
comment
Вам не нужно этого делать. Если вы выполните шаги, которые я перечислил выше, он установит их все на «Использовать», а затем вы переопределите stdafx.cpp на «Создать». - person the_mandrill; 06.06.2019