Output files should be separated from input files. Usually, ‘clean’ option is supported to delete auto-generated-output-files. But, separating outputs at directory level is better – for example, ‘out’ directory is root directory for output.
This is very basic and fundamental. But, this also easily ignored.
Supporting ‘clean’ option is good. But, cleaning output files those are scattered over several different places, is difficult to maintain. And, in this case, to find some necessary output files is also difficult.
On the environment that output files are separated at directory level, programmer can tell easily that which is input and which is output. This means, he/she can know which are necessary files to build software without further efforts – easy to read software.