C++ – How to implement precompiled headers into your project

cincludeprecompiled-headersvisual c++visual-studio-2005

I understand the purpose and reasoning behind precompiled headers. However, what are the rules when implementing them? From my understanding, it goes something like this:

  1. Set your project up to use precompiled headers with the YU directive.
  2. Create your stdafx.h file and set that to be your precompiled header.
  3. Include this as the top include statement in each of your .h files.

It this correct? Should you exclude the including it in the files that are included within your precompiled header? Currently, I get the following compilation error when following my intuition with this:

error C2857: '#include' statement
specified with the /Ycstdafx.h
command-line option was not found in
the source file

The command-line options are as such:

/Od /I
"../External/PlatformSDK/Include" /I
".." /I "../External/atlmfc/Include"
/D "_DEBUG" /D "_UNICODE" /D "UNICODE"
/Gm /EHsc /RTC1 /MDd /Yc"stdafx.h"
/Fp"….\Output\LudoCore\Debug\LudoCore.pch"
/Fo"….\Output\LudoCore\Debug\"
/Fd"….\Output\LudoCore\Debug\vc80.pdb"
/W4 /WX /nologo /c /ZI /TP /wd4201
/errorReport:prompt

Best Answer

You stdafx.cpp should include stdafx.h and be built using /Yc"stdafx.h".

Your other *.cpp should be include stdafx.h and be built using /Yu"stdafx.h".

Note the double-quote characters used in the compiler options!

Here's a screenshot of the Visual Studio settings for stdafx.cpp to create a precompiled header:

create precompiled header

Here are the corresponding command-line options (which are read-only but reflect the settings specified on other pages; note that the IDE inserts double-quote characters around the filename, in the compiler option):

options

This is what's in my stdafx.cpp file:

// stdafx.cpp : source file that includes just the standard includes
// CallWinsock.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
Related Topic