<rant>
In this forum you will probably be pointed to ant or maven. I used ant (not yet maven) and must say that I don't really see an improvement over make. Make is pain in the butt with awkward syntax and a not very well thought out rule evaluation system. Ant is very much the same, because someone mistook XML for a programming language, invocation of targets is inconsistent and all the fiddly bits that necessarily need to be done in a built system (as opposed to a system that compiles some java files and wraps them into a jar) are hard to achive because access to the command line is weak.
</rant>
That said, just for the fun of it you may have a look at bras.berlios.de. It is my creation but turned out to be hardly better than the two above. I achieve but one goal: the rule engine is cleanly integrated with the script language, so there is no deadly mix of syntaxes as with makefiles containing shell scripts. Stupid me I have chosen Tcl as the script language. And the definition of rule/target/dependency/condition/command is good, but not perfect.
Today I use ant for the simple reason that my main project is a Java open source library and delivering with some unkown built system isn't a winner.
A final remark: C/C++ programs are usually compiled individually, i.e. one compiler invocation per source file. This is expensive with javac, so just compile all source files (at least in one directory) in one javac invocation.
All this is probably the wrong forum, but you asked ...:-)
Harald.
My Preference is to allow an IDE to comple and build my program. You can do a increamental compile of over 9000 classes a cross hundreds of directories with minimal configuration.
Then for a full build/compile I use ant. It is fiddly but if you use an ant script which already does more or less what you want and modify it, it can be fairly simple.