cmake-init
cmake-init copied to clipboard
Raise CMake requirement
Right now, people consuming projects generated with cmake-init are required to have at least CMake 3.14 installed and developers developing those projects are recommended to have at least 3.20 installed to make use of presets.
Group | Minimum CMake version | Reason |
---|---|---|
Consumers | 3.14 |
|
Consumers | 3.xx |
|
Developers | 3.20 |
|
CMake 3.20 introduced presets version 2, which is what could fix #34. This version also added the --test-dir
argument to ctest
which enables the developer to run tests from any working directory.
IMHO: this should no a problem to do so. CMake may be easily installed or updated from pypi
In general, I would prefer the ranged version of
cmake_minimum_required(VERSION <min>[...<policy_max>])
See too https://cmake.org/cmake/help/latest/manual/cmake-policies.7.html#policies-introduced-by-cmake-3-20
The requirement is not raised willy-nilly just for the sake of raising it. Especially the range form of the command, for which I have not found a single use-case yet. Everytime the more sensible thing would have been just raising the minimum requirement to begin with. The minimum required version must have a good reason to be selected, see the table above.
The next time it will have to be increased is when C++23 comes into play and the standard library will provide a module interface (import std;
), but that will be localized to C++23 and newer standards only. Compilers are slow with implementing modules anyway, and CMake already supports modules since 3.20.
There are also the file sets introduced in 3.23 (https://cmake.org/cmake/help/latest/release/3.23.html#commands), but I'm not sure about their value as of yet. I will likely create an example project utilizing it and add it to the growing list of examples as a way to evaluate the feature.
In C++20, the standard library's headers are usable as header units in modules, however C++23 provides a much better interface via import std;
, so coupled with no compiler properly supporting modules yet, it's best to delay modules in this project until C++23. #55 is tracking modules.