I appreciate all of the replies and comments, but I think a point is being missed.
Let's say my Java app is made up of 9,500 source files (which is actually true!). Let's say I change 20 of them.
1. How could I create a dependency that basically says the 9,500 Java files in an entire source directory tree result in the 9,500 class files in the output directory tree?
2. I need to create a text file to pass a lot of parameters to a single evocation of javac. This file must contain all the updated java files and a pointer (classpath) to the already up-to-date class files.
What has been suggested works fine for 20 Java files. But it is impractical for 10,000 files.
Make doesn't deal with source trees well. Although I can use 'find' in a recipe, I can't for the target and dependency files. I can't say, all of the class files in one tree is dependent on all of the java files in another - while also only compiling the out-of-date files - all in one javac evocation.
Perhaps I am wrong. But I think these are the problems that drove the development of ant, maven, gradle, and others.
I intuit that make could be enhanced to deal with these other scenarios if the will existed.
Thanks.
Blake