Introduce a declarative specification format
CMake's imperative language is currently used both for scripting and for declaring targets/sources/etc. for the build system. Targets are defined by imperative commands like
add_library whose arguments can come from arbitrary imperative logic. While humans may be able to make changes, it is difficult for tooling to do so in this format (e.g. to add a source file through an IDE). Furthermore, many projects have created their own macro/function-based systems to offer a more declarative style.
Several alternative imperative languages have been proposed for CMake, but using a new imperative language will not solve this problem. Instead we should consider introducing a declarative specification format that can support the majority of specification of buildsystem targets and sources. The format will then be accessible to tooling, and can also be loaded by CMake's imperative language for evaluation of conditions for the target environment.