Perforce provides a freely available build tool alternative to 'make' called Jam. It features a raw C implementation, conditional compilation to cover a range of file systems, and a funky declarative syntax that smooches all the write-only shell hacks 'make' leans on bye-bye. Definitely worth a look if you are starting a project and need something smarter than 'make' backing up your ContinuousIntegration.
See http://www.perforce.com/jam/jam.html
Contrast to ApacheAnt.
I have looked at Jam in past and had difficulties to get it to work in directory hierarchies with languages different than C. The problem was that all targets share a flat name space. This means, that the same name used in different directories could cause troubles. Jam attaches tokens to targets to make them unique but this mechanism is not part of the base calculus but added later. Otherwise I was pretty impressed by Jam because it allows a much better re-use of rules than Make.
-- ChristianLindig?
You need to look into using Jam's explicit grist. This solves the problem of same named file.