I would warn against this attitude. Trying to do too much magic
is one of reasons I ignore all of modern build tools and still
keep my makefiles. There is huge benefit in knowing that your
build tool can express any dependency tree based workflow in
uniform manner - be it compiling sometithing, downloading
remote artifacts or generating a package.
They're not mutually exclusive. High-level convenience can
happily coexist with low-level control. Isn't that why we're on
this forum? ;) Once more, CMake handles this well, modulo the
terrible language to do it in.
With a good base "smart" solutions can be built on top. This is
actually how we use make in Sociomantic - by having a set of
standard makefiles with D-specific rules that allow to define
build target as simple as this:
$B/appname: $C/src/appname/main.d
all += $B/appname
(yes, that is all that needs to be in actual makefile)
That's pretty cool. I'm aiming for something along those lines.
Atila