哪一个CMake版本是最低版本?

哪一个CMake版本是最低版本?,cmake,minimum,required,Cmake,Minimum,Required,我想为CMake定义一个最低版本,使用“CMake_最低要求”功能。 我看到一些项目将最低版本设置为2.8,另一些项目将最低版本设置为3.0或3.2。 我想了解您对该主题的看法和最佳实践。使用cmake_minimum_required()函数可以避免由于CMakeLists.txt假设cmake的版本比当前主机上安装的版本更高而产生任何神秘的错误消息 举个例子,过早地失败,并且有一个明确的信息 CMake 3.2 or higher is required. You are running v

我想为CMake定义一个最低版本,使用“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\u CXX\u标准11)
。我相信你会同意的


理想的环境是:

  • 包含脚本所需所有功能的最旧版本
  • 与运行旧版本的用户以及脚本的最大兼容性。但它需要测试到底是哪个版本首先支持您的构造。因此,它通常归结为:

  • 您测试过的最旧版本,具有脚本所需的所有功能
  • 对于大多数项目来说,这可能已经足够好了。如果您是唯一一个真正参与该项目的人,并且CMake兼容性测试在您的列表中排名很低,那么您可能会得到:

  • 您当前使用的版本
  • 一旦有人试图编译您的项目,后一种方法就有一个严重的缺点。相当多的人没有使用最新版本的东西。特别是在Linux上,默认情况是使用包管理器提供的任何内容。例如,UbuntuWily目前的版本是3.2.2——您可能有一个更高的版本,但除非您需要一个更高的版本,否则您不应该需要它(因为这意味着,如果不先手动安装更新版本的CMake,人们将无法构建您的项目)

    你不应该做的是

    • 需要一个非常旧的版本,但不针对该旧版本进行实际测试(否!

    原因应该是显而易见的——构建可能会失败,而用户却得不到任何关于出错原因的提示。

    意见和最佳实践往往与
    为什么?
    问题的答案有关。我们会在可能的情况下选择最大(最后)版本?不是最后一个,而是您需要的版本;最新版本(或最新的夜间版本)可能不是您需要的。但首先,你需要确定这些限制背后的原因,并选择一个满足你大部分需求的,很可能不是最后一个版本。如果我要开始一个新项目,我会选择3.3作为最低要求。3.x版本确实引入了许多非常有用的命令(例如
    target\uu…
    命令或
    if(…IN\u LIST…
    ),并且它具有更好的一致性检查(可通过
    策略配置)。我遇到了一些与我的环境相关的bug(例如与忍者一起出现),它们在3.3版本中得到了修复。@Mustafangul:如果你知道满足你要求的最低版本,并且它是几个版本,那么选择最新和最棒的版本基本上是故意让人讨厌的。在撰写本文时,cmake.org拥有3.4.3。Debian stable有3.0.2,Ubuntu wily有3.2.2,甚至Gentoo stable也“只有”3.3.1。因此,为了编译您的软件,基本上每个人都必须先手动下载并安装一个较新的CMake(这将开始恶化,因为它不会通过软件包管理器进行更新)。作为一名客户,我不喜欢这样。在CMakeLists.txt中保留一条评论,以跟踪为什么您需要这个版本的CMake,这有助于以后的维护。我很后悔没有按照DevSolar的建议写评论。我现在正盯着我的
    cmake_minimum_required
    行,不记得为什么我选择了它的当前版本值。@EmileCormier:如果你记得你选择这个数字是因为{reason},请安装并检查有什么中断。-)或者对它不屑一顾,说“只要它起作用就没那么重要了。”——)我内心的~~完美主义者~~痴迷者会想做一个二进制搜索,以找到真正有效的最小版本-D