cmake_minimum_required

要求 CMake 的最低版本。

cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

版本 3.12 新增:可选的 <policy_max> 版本行为;在旧版本 CMake 中被忽略。

设置项目的 CMake 最低版本要求。 还会更新策略设置,如下所述。

<min> 和可选的 <policy_max> 都是 CMake 版本,格式为 major.minor[.patch[.tweak]],其中 ... 是字面量。

如果运行的 CMake 版本低于要求的 <min> 最低版本,它将停止处理项目并报告错误。 可选的 <policy_max> 版本(如果指定)必须至少为 <min> 版本,并设置策略版本。 如果运行的 CMake 版本早于 3.12,则额外的 ... 点将被视为版本组件分隔符,导致 ...<max> 部分被忽略,并保留基于 <min> 的 3.12 之前的策略行为。

此命令会将 CMAKE_MINIMUM_REQUIRED_VERSION 变量的值设置为 <min>

CMake 2.6 及更高版本接受但忽略 FATAL_ERROR 选项。 应该指定此选项,以便 CMake 2.4 及更低版本失败时会报错,而不是仅发出警告。

注意

在顶层 CMakeLists.txt 文件的开头调用 cmake_minimum_required() 命令,甚至在调用 project() 命令之前。 在调用其他可能受版本和策略设置影响的命令之前,建立版本和策略设置非常重要。 另请参阅策略 CMP0000

function() 内部调用 cmake_minimum_required() 会将某些效果限制在调用时的函数作用域内。 例如,CMAKE_MINIMUM_REQUIRED_VERSION 变量不会在调用作用域中设置。 但是,函数不会引入自己的策略作用域,因此调用者的策略设置 *将* 会受到影响(见下文)。 由于某些操作会影响调用作用域,而另一些操作则不会,因此通常不建议在函数内部调用 cmake_minimum_required()

策略版本

cmake_minimum_required(VERSION <min>[...<max>]) 隐式调用

cmake_policy(VERSION <min>[...<max>])

这指定当前的 CMake 代码是为给定的 CMake 版本范围 <min>[...<max>] 编写的。 它将“策略版本”设置为

  • 范围的 <max> 版本(如果指定),或

  • <min> 版本,或

  • CMAKE_POLICY_VERSION_MINIMUM 变量的值(如果它高于其他两个版本)。

策略版本有效地请求给定 CMake 版本首选的行为,并告知较新的 CMake 版本警告其新策略。 运行的 CMake 版本已知的所有策略以及在该版本或更早版本中引入的所有策略都将设置为使用 NEW 行为。 以后版本中引入的所有策略都将取消设置(除非 CMAKE_POLICY_DEFAULT_CMP<NNNN> 变量设置了默认值)。 这有效地请求给定 CMake 版本首选的行为,并告知较新的 CMake 版本警告其新策略。

版本 4.0 变更:移除了与 CMake 3.5 之前版本的兼容性。 未指定至少 3.5 作为策略版本的 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用(可选地通过 ...<max>)将在 CMake 4.0 及更高版本中产生错误。

版本 3.31 变更:与 CMake 3.10 之前版本的兼容性已被弃用。 未指定至少 3.10 作为策略版本的 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用(可选地通过 ...<max>)将在 CMake 3.31 及更高版本中产生弃用警告。

版本 3.27 变更:与 CMake 3.5 之前版本的兼容性已被弃用。 未指定至少 3.5 作为策略版本的 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用(可选地通过 ...<max>)将在 CMake 3.27 及更高版本中产生弃用警告。

版本 3.19 变更:与 CMake 2.8.12 之前版本的兼容性已被弃用。 未指定至少 2.8.12 作为策略版本的 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用(可选地通过 ...<max>)将在 CMake 3.19 及更高版本中产生弃用警告。

参见