OLD | NEW |
| (Empty) |
1 # Windows precompiled headers | |
2 | |
3 Using precompiled headers on Windows can speed builds up by around 25%. | |
4 | |
5 Precompiled headers are used by default when GYP generates project files for | |
6 Visual Studio 2010. | |
7 | |
8 When using Visual Studio 2008, use of precompiled headers is off by default (see | |
9 discussion below). To turn on precompiled headers in your client when using | |
10 MSVS 2008, make sure your `~\.gyp\include.gypi` file looks something like this, | |
11 then run `gclient runhooks` to update the solution files generated by GYP: | |
12 | |
13 { | |
14 'variables': { | |
15 'chromium_win_pch': 1, | |
16 } | |
17 } | |
18 | |
19 Since [r174228](http://src.chromium.org/viewvc/chrome?view=rev&revision=174228), | |
20 default is using precompiled header for non `Official` build. | |
21 | |
22 ## Discussion | |
23 | |
24 MSVS 2008 has some limitations in how well it handles precompiled headers. | |
25 We've run into two issues: | |
26 | |
27 1. Using precompiled headers can push our official builders over the edge of | |
28 the world, into the dangerous Kingdom of Oom (out of memory). | |
29 1. When compilation flags are changed, instead of doing the right thing and | |
30 rebuilding the precompiled headers and their dependents, MSVS prints a | |
31 warning instead, saying the precompiled header file was built with | |
32 different flags than the current file. | |
33 | |
34 Because of the above, we disabled use of precompiled headers by default, and | |
35 required the `chromium_win_pch` flag discussed above to be set. | |
36 | |
37 We may be able to turn use of precompiled headers back on for Debug builds by | |
38 default, by adding a workaround to MSVS's limitations to GYP, i.e. if it detects | |
39 a change in compile flags it could blow away MSVS's output directory. | |
40 | |
41 ## Troubleshooting | |
42 | |
43 Both of these apply to Visual Studio 2008 only. | |
44 | |
45 ### Precompiled header is missing | |
46 | |
47 **Problem**: You didn't rebuild recently, and you want to build an individual | |
48 source file (Ctrl+F7). MSVS complains that the precompiled header is missing. | |
49 | |
50 **Solution**: You could do a full build of the target your source file is in. If | |
51 you'd like to avoid that, find the precompiled header generator file, located | |
52 within a filter somewhere like `../../build/precompile.cc` in your project, | |
53 individually build that file, then individually build the source file you | |
54 intended to build. The `precompile.cc` file is the generator for the precompiled | |
55 header file. | |
56 | |
57 ### specified for precompiled header but not for current compile | |
58 | |
59 **Problem**: MSVS prints out a warning like this (that we treat as an error): | |
60 `warning C4651: '/D_FOOBAR' specified for precompiled header but not for current | |
61 compile` | |
62 | |
63 **Solution**: This means compilation flags have changed from when the | |
64 precompiled header file was generated. The issue is that MSVS does not handle | |
65 this correctly. As compilation flags may affect the precompiled header file, it | |
66 should be rebuilt along with its dependents. The workaround for now is to do a | |
67 full rebuild, or (if you want to try to be minimal) a rebuild of all projects | |
68 previously built that use precompiled headers. | |
OLD | NEW |