Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Raise CMake requirement #28

Open
friendlyanon opened this issue Oct 3, 2021 · 6 comments
Open

Raise CMake requirement #28

friendlyanon opened this issue Oct 3, 2021 · 6 comments

Comments

@friendlyanon
Copy link
Owner

friendlyanon commented Oct 3, 2021

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
Copy link
Owner Author

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.

@ClausKlein
Copy link

ClausKlein commented Mar 31, 2022

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

@ClausKlein
Copy link

ClausKlein commented Mar 31, 2022

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

@friendlyanon
Copy link
Owner Author

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
Copy link
Owner Author

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.

@ClausKlein
Copy link

What are the reasons you want to stay back with improvements independently form C++23?

Newer CMake versions can be easily installed with pip install cmake on each platform.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants