cmake-init icon indicating copy to clipboard operation
cmake-init copied to clipboard

Raise CMake requirement

Open friendlyanon opened this issue 3 years ago • 9 comments

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.

GroupMinimum CMake versionReason
Consumers 3.14
Consumers 3.xx
Developers 3.20
  • Presets version 2 (enables users with VSCode's "CMake Tools" extension)
    • Build and tests presets simplify command line workflow
  • ctest --test-dir to run tests from anywhere
  • Improvements from earlier versions

friendlyanon avatar Oct 03 '21 20:10 friendlyanon

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.

friendlyanon avatar Dec 15 '21 13:12 friendlyanon

IMHO: this should no a problem to do so. CMake may be easily installed or updated from pypi

ClausKlein avatar Mar 31 '22 18:03 ClausKlein

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

ClausKlein avatar Mar 31 '22 18:03 ClausKlein

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.

friendlyanon avatar Mar 31 '22 23:03 friendlyanon

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.

friendlyanon avatar Apr 17 '22 11:04 friendlyanon