What should C do to solve it? Add another layer of abstraction on top of it? CMake does that and people complain about the extra complexity.
Also how e.g dotnet builds on top of c or llvm?