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

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

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

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

Ответ 1

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

Ответ 2

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

  • Все файлы cpp в проекте должны включать stdafx.h (вы можете изменить это на что-то еще, если хотите)
  • Выберите проект в обозревателе решений и в Properties -> C++ -> Precompiled Headers установите "Создать/Использовать предварительно скомпилированные заголовки" в "Использовать". Нажмите Применить
  • Пока страницы свойств все еще отображаются, выберите stdafx.cpp в проводнике решений и установите значение "Создать"