Peter Dimov
For the user audience who needs to build something with a specific toolset, using specific options, that's not an issue - you just hardcode the CMAKE_CXX_FLAGS. But for the audience of me who needs to write his test/CMakeLists.txt such that test_no_exceptions.cpp is compiled without exceptions, regardless of the user generator or compiler, this won't do at all.
Hm, in my experience it's the other way around: end-users find it too tedious to remember the sequence of options to enable the right set of warnings for each compiler, etc. On the other hand, how often do you write a test that needs to be built with exceptions disables and how hard is it to specify the actual options for essentially two classes of C++ compilers: MSVC and everything else?
Then there's the separate "run ctest" phase, which you didn't list.
I am not certain why they did it this way but I strongly suspect one of the main reasons is the limitation of the underlying build systems they have to support (point 1 in my list).