Maven, Ant, implemented in Java
Sbt, implemented in Scala
Leinigen, implemented in Clojure
MSBuild, implemented in a mix of C++ and C#
Gems, implemented in Ruby
eggs, implemented in Python
cargo, implemented in Rust
Why should it be any different for C and C++?
So vcpkg it is.
(I’m not sure why I decided to share this right now. Sorry.)
That said one thing I like about autotools is how it generates a build system that doesn't depend on more than shell script and make, and can be packaged that way. It's annoying that CMake produces a build system that requires CMake to be present to build.
You know, what I'd _really_ like, the more I think about it, is consistent a way to treat the "build system" simply as a separate project than the "source code". It's just silly how coupled the build system can become with the specific project it's been designed for. More thought is needed towards decoupling build systems from their corresponding target code. The last thing I want as a C/C++ developer is to have to maintain multiple build systems AND make sure everything is correct about what "package files" (pkg-config, CMake targets, etc) they install and where. Lately I find more and more time is spend maintaining build systems than the actual code, and it's very frustrating, and only gets worse as more and more "solutions" become available that require whole new build systems to be designed and integrated. I have several projects that have at least 2 build systems in their repositories, and we have to constantly test them both and make sure they do the same things.