pch support

Rolf Kalbermatter rolf.kalbermatter at citeng.com
Fri Jan 13 03:47:43 CST 2006

> On Thu, Jan 12, 2006 at 09:02:42PM +0100, Rolf Kalbermatter wrote:
> > Thomas Weidenmueller wrote:
> > 
> > > We've been using PCH with GCC for a long time in ReactOS, 
> it's been
> > > working very well and reliable. Compiling ReactOS is *a lot* 
> > > faster with
> > > PCH enabled.
> > 
> > Basically what I get in MSVC 6 when modifing a header somewhere and
> > PCH is enabled is that MSVC keeps mocking about errors in the
> > headers, my change was supposed to fix. Disabling PCH (and
> > sometimes deleting the *.pch file) always fixes those issues.
> Unless, of course, your filesystem is samba-mounted from a linux box,
> when PCH tends to cause internal compiler errors.

Well, I finally read a bit about how precompiled headers are supposed to work and it seems MSVC does work in a similar way than gcc.
Basically you can only have one pch file per working unit.

My problem was that when you create a new project in MSVC 6, PCH is by default enabled and set to automatic but no specific header
file is filled in in the project settings. What this seems to do is taking some (which?) header files and putting them in an
automatically generated pch file in your project output directory. Of course for more than 1 source file in a project this is likely
each time different so build times will be even worse than without PCH. Also it seems that header dependancy tracking isn't reliable
in such a setup.

>From some explanations, I gathered that the only useful PCH setting in MSVC is as well to use one specific pch include file and even
more specifically configure one source file to create that pch file and all others only to use it, otherwise MSVC tends to recompile
the pch file on some arbitrary conditions multiple times for different source files, basically reverting the purpose of PCH more or
less or even make it worse.

One thing to watch out also is that any statements in a source file before the specifically set precompiled header file are
completely, and without any indication (well except the strange resulting compile errors of course) ignored.

Rolf Kalbermatter

More information about the wine-devel mailing list