For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable.
The wording of the GPL is quite clear - it only requires the Makefiles to be included, and even adds an exception for the compiler when included with the OS as a runtime dependency. It doesn't say anything about the requirement to include the compiler.
Keep in mind that when the GPL was first written, GCC was only 2 years old, and proprietary compilers were unavoidable in many areas. Even today, proprietary compilers are still unavoidable for certain applications. e.g. FPGAs. To require the publishers of open source programs to cover the cost of licensing the compiler for all their users would have been insane, and significantly limited the spread of open source software.
The obvious intent of the GPL is for you to get a code in a way that allows you to work with it and get results.
The intention of the GPLv2, to paraphrase Linus Torvalds, is that in exchange for the ability to modify the software to suit yourself, the changes you make can be merged back into the upstream. The GPLv3 places a greater focus on the ability of the user to generate a useful executable, but the v2 was chosen (possibly intentionally) for this instead. Whatever your opinion on v3, their choice of v2 speaks for itself.