Depends, really

Some people think that make is a terrible piece of software. Honestly, it is just awful for modern projects with large numbers of dependencies. Header file dependencies become a problem. There are options to auto-insert the dependencies on header files into the makefile. Subdirectories are a problem – isolating certain code in directories is tricky. You can use the VPATH feature to provide a certain level of automatic path traversal without over-complicating the makefiles, and for trickier features you have the :sh= [svr] or $(shell …) [gnu] options to pass the work off to the shell or a script. Still the best thing about make is that it completely evaluates the dependency graph for targets; explicitly forbidding loops (or self reference).
Then we come to software releases, and their dependencies. You can’t install X without Y. you can’t remove X without remving Y. Removing X will break Y therefore you can only remove X and Y together. Good idea. Difficult on customers, though. They want an ‘add/remove programs’ option which installs and uninstalls all the needed components. I recently bought Sin Episodes from steam. It auto-installed Sin 1/Sin Multiplayer. I wanted to uninstall Sin 1/Sin Multiplayer. You can’t Sin 1 depends on Sin Multiplayer. Sin Multiplayer depends on Sin 1. Perfect cyclic dependency preventing you from uninstalling. Uninstalling means going in and deleting the .gcf file. Ah well, that’s life, I suppose.