哪个 CMake 版本最低?

Which CMake version as the minimum?

我想使用 "cmake_minimum_required" 工具为 CMake 定义一个最低版本。 我看到一些项目将最低版本设置为 2.8,另一些设置为 3.0 或 3.2。 我想了解您对该主题的看法和最佳做法。

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

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

CMake 3.2 or higher is required. You are running version 2.8.12.2

...比以后更神秘(很多)的东西更受欢迎...

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

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


理想的设置是:

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

与人们 运行 旧版本以及您的脚本的最大兼容性。但它需要测试 确切 哪个版本最先支持您的构造。所以它通常归结为:

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

对于大多数项目来说,这可能已经足够了。如果您是唯一一个实际从事该项目的人,并且 CMake 兼容性测试在您的列表中确实很低,您可能最终会得到:

  1. 您当前使用的版本。

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

你应该做的是...

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

原因应该很明显——构建可能会失败,而用户却没有得到任何关于错误原因的提示。