This isn't just a problem with you, this is really a problem in the ecosystem of build tools, primarily those that target C/C++ code (though the problem exists with other languages and their build tools as well on a lesser scale). And I say this as someone who spent over a decade coding in nothing but C and C++ (thankfully that is in the past).
Go has essentially solved these problems, but only for Go code and in the process threw out (for now, at least) the notion of binary linkable libraries that your code can access, which may or may not be a bad thing depending upon how you feel about dynamically linkable libraries.
I don't think the problem is practically fixable on existing languages whose basic toolset wasn't built to deal with these sort of things. And there is a cultural element in addition to the technical one -- even if you managed to create such a build toolset for languages like C/C++, some (large) subset of C/C++ programmers are going to want to hold on to their hard-won mastery of all things configure/autconf/make and stick with them, even if those tools are all completely horrible (which, IMO, they are).