1. A computer implemented method comprising: receiving an original set of source code files to be compiled for a compilation target; generating a reduced set of source code files from the original set of source code files, including adding, to the reduced set of source code files, each file in in the original set of source code files having an entry point, wherein the entry point is a location in source code where control can be transferred from an operating system to a target executable that uses the compilation target, whereby any files in the original set of source code files that do not include an entry point are not included in the reduced set of source code files; scanning each unscanned file in the reduced set of source code files until no unscanned files in the reduced set of source code files remain, including, for each unscanned file: repeatedly identifying import statements in the unscanned file, and adding, to the reduced set of source code files, each file identified by an import statement in the unscanned file; determining that the compilation target is represented by an entry in a compilation cache, wherein the entry in the compilation cache specifies a previous set of files used to compile the compilation target and a location of the previously compiled target; determining that the reduced set of files matches the previous set of files used to compile the compilation target and that none of the reduced set of files has changed since the entry for the compilation target was cached; and in response, reusing the previously compiled target instead of recompiling the compilation target, whereby if any of the original set of source code files that are not included in the reduced set of source code files have changed since the entry for the compilation target was cached, the compilation target is not recompiled.