Build systems should be agnostic from source control systems.
The unit of dependencies should be other projects or binary libraries.
I'm not sure about that. If you have dependencies to other internal repositories and to specific revisions, it is not clear who is responsible. Make can be agnostic, but Maven or NPM probably can not.
Maven surely can. You only depend on binary versions of Java libraries, no source code, as it should be.
CMake is quite popular (and maybe most popular) but it's a complete horror in comparison to other build systems, especially for other languages (like Cargo for Rust).
If you need some specific example: try to add a git-based dependency with a specific branch in CMake.