哪个CMake版本最低?

mus*_*nul 17 cmake minimum required

我想用"cmake_minimum_required"工具为CMake定义最小版本.我已经看到一些项目设置了最低版本2.8,其他一些设置为3.0或3.2.我想了解您对该主题的意见和最佳实践.

Dev*_*lar 18

cmake_minimum_required()函数用于避免由于CMakeLists.txt假定CMake的更高版本而不是当前主机上安装的版本而产生的任何神秘错误消息.

作为一个例子,早期失败,并有一个明确的信息......

CMake 3.2 or higher is required. You are running version 2.8.12.2
Run Code Online (Sandbox Code Playgroud)

......比以后更加神秘的东西更受欢迎......

In file included from /home/foouser/src/testprj/string.cpp:1:0:
/home/foouser/src/testprj/string.hpp:94:29: error: ‘std::is_same’ has not been declared
Run Code Online (Sandbox Code Playgroud)

...只是因为在这个例子中,较旧的CMake版本不支持set( CMAKE_CXX_STANDARD 11 ).我相信你会同意的.


理想的设置是:

  1. 最旧版本,具有脚本所需的所有功能.

与运行旧版本的人员以及脚本的最大兼容性.但是,它需要测试的版本究竟它是第一个支持你的结构.所以它通常归结为:

  1. 您测试过的最旧版本具有脚本所需的所有功能.

这对大多数项目来说可能已经足够了.如果你是唯一一个真正参与该项目的人,并且你的列表上的CMake兼容性测试真的很少,你可能最终得到:

  1. 您当前使用的版本.

一旦其他人试图编译您的项目,后一种方法就会有严重的缺陷.相当多的人没有使用最新版本的一切.特别是在Linux上,默认是使用包管理器为您提供的任何内容.例如,Ubuntu狡猾,目前版本为3.2.2 - 可能有更高版本,但除非您需要更高版本,否则您不应该要求它(因为这意味着人们将无法构建您的项目没有先手动安装较新版本的CMake).

应该做的是......

  • 需要一个非常旧的版本,但实际上并没有测试旧版本(不!).

原因应该是显而易见的 - 建筑可能会失败,没有用户得到任何关于为什么出错的提示.

  • 在 CMakeLists.txt 中保留注释来跟踪您需要的 *此* 版本的 CMake 的确切原因有助于以后的维护。 (2认同)