In spending the past week abusing myself with CMake, I think two things are fundamentally true and unlikely to ever change:

  1. CMake 3.16 beats the crap(!) out of 2.x.
  2. I will never, ever love CMake. Period.
On the positive side, in the years since it last pissed me off, they’ve added support for generating the build for Ninja—a tool which I do love very much. So at least, I get to solve my problem, and I don’t have to deal with MSBuild, NMake Makefiles, or Unix Makefiles. Although, I might have gained a few new grey hairs along the way. I very much would prefer the generated build did more actions in ninja than in cmake, for a multitude of reasons.
My hate for CMake 2.x mostly stems from its tendency to complicate my cross platform efforts rather than aid them. Quotes I’ve made over the years about autotools, often stem from dealing with either CMake or SCons.
My hate for CMake 3.x mostly stems from the nature of what it is: configure, generate, build shit; and consistency issues that follow that. Actually, it makes me remember the compile versus runtime stuff in Perl 5, and recall the times I’ve muttered: “Yeah, please just don’t !@#$ with that, pal.”
The difference there, is perl and I are old friends. CMake and I are old enemies. That, and I suppose these days the number of people that like the former outweigh the latter.