pch support

Marcus Meissner meissner at suse.de
Fri Jan 13 04:33:23 CST 2006


On Fri, Jan 13, 2006 at 10:47:43AM +0100, Rolf Kalbermatter wrote:
>  
> > 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.


Hmm, perhaps use a CFLAGS "-include autogenerated.h" trick.

Generate "autogenerated.h" by collecting all possible includes via 
a script on "make depend", then force it into every file with
-include autogenerated.h (previously compiled to pch).

Has the advantage that the magic is all in the buildsystem, no
source files need to be touched.

Ciao, Marcus



More information about the wine-devel mailing list