Once your project reaches a certain size the actual commands and their arguments end up making a multiline mess for each command and aren't actually that helpful unless it's the build process itself you are debugging. It gets even worse if you generate dependency files which involve piping the output of gcc through some arcane sed commands.
I generally prefer having make tell me what it's doing (Generating depfile.d, building file.c, linking file.o) etc. And then it's very easy to spot what file threw the error. Where I work, we turn on every GCC warning we can find and that alone is several lines per gcc execution (programmers are under orders to not leave warnings). Compiles here happen several times an hour but the build system only gets worked on when I have some free time and feel like I need some pain in my life (once a year at best). The other programmers don't know or care that the build system crawls the source tree, duplicates the tree structure in a build folder, generates dependency and object files in the corresponding subfolders of the build folder etc etc. They only want to see what source or include file they broke.