Does Cons re-scan a file every time it calculates dependencies?
Not within a single invocation. If multiple source files all #include a given .h file, then Cons only scans that .h file (and any subsidiary .h files that it includes) once, and remembers the result for later files that also #include that .h file. Every time Cons is invoked, however, it does re-scan each .h file once.