In the NT build environment a.k.a. Windows DDK build environment, you could build your source tree using multiple processors by specifying the -M parameter to build.exe. What it did was build your projects sequentially ordered by dependency, and when it was building each project, it would spin up multiple threads to build the individual source files, obviously, first building the precompiled header, and any other things that needed to be done before the rest of the source could be built (midl, etc.)
Visual Studio/MSBuild takes a very different approach. It build projects using multiple threads, but only builds the individual source files sequentially. This works great when you have a lot of small projects. When you have projects with a lot of source files, this is frustrating, though.
Is anyone in the know enough to know why the Visual Studio people don't use threads for building individual source files like the Windows folk do (or at least used to)?