If .NOTPARALLEL is mentioned as a target, then this invocation of make will be run serially, even if the ‘-j’ option is given. Any recursively invoked make command will still run recipes in parallel (unless its makefile also contains this target). Any prerequisites on this target are ignored.
.NOTPARALLEL works at the file level not at the target level, so by adding it you disable parallelism. This is actually a great thing to add to the solution level Makefile to ensure that projects are build sequentially even if the user specifies more than one job in the command line.
To make sure that the .pch file is build before everything else, we need to make it a dependency for all objects.