cmake_minimum_required

要求 CMake 的最低版本。

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

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

设置项目所需的 CMake 最低版本。同时还会更新策略设置,具体说明如下。

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

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

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

FATAL_ERROR 选项虽然被接受,但在 CMake 2.6 及更高版本中会被忽略。为了确保 CMake 2.4 及更低版本在出错时报错而不是仅发出警告,建议指定该选项。

注意

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

function() 内部调用 cmake_minimum_required() 会将某些效果限制在调用函数时的作用域内。例如,CMAKE_MINIMUM_REQUIRED_VERSION 变量不会在调用作用域中被设置。不过,函数不会引入自己的策略作用域,因此调用者的策略设置确实会受到影响(详见下文)。由于这种既影响又部分不影响调用作用域的混合特性,通常不建议在函数内部调用 cmake_minimum_required()

策略版本

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

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

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

  • 如果指定了范围内的 <policy_max> 版本,则设为该版本,或者

  • 设为 <min> 版本,或者

  • 如果 CMAKE_POLICY_VERSION_MINIMUM 变量的值高于上述两个版本,则设为该变量的值。

策略版本实际上请求了特定 CMake 版本所偏好的行为,并告知较新的 CMake 版本针对其新策略发出警告。所有运行中的 CMake 版本已知的、且在策略版本或更早版本中引入的策略,都将被设置为使用 NEW 行为。所有在后续版本中引入的策略将保持未设置状态(除非 CMAKE_POLICY_DEFAULT_CMP<NNNN> 变量设置了默认值)。

注意

...<policy_max> 并不意味着禁止使用更高版本的 CMake。它仅指定了该项目或模块已进行主动更新和维护的最高 CMake 版本。

4.0 版本更改: 移除了对 3.5 以前版本的 CMake 的兼容性。在 CMake 4.0 及以上版本中,如果 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用中指定的策略版本低于 3.5(可通过 ...<policy_max> 指定),将会产生错误。

3.31 版本更改: 弃用了对 3.10 以前版本的 CMake 的兼容性。在 CMake 3.31 及以上版本中,如果 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用中指定的策略版本低于 3.10(可通过 ...<policy_max> 指定),将会产生弃用警告。

3.27 版本更改: 弃用了对 3.5 以前版本的 CMake 的兼容性。在 CMake 3.27 及以上版本中,如果 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用中指定的策略版本低于 3.5(可通过 ...<policy_max> 指定),将会产生弃用警告。

3.19 版本更改: 弃用了对 2.8.12 以前版本的 CMake 的兼容性。在 CMake 3.19 及以上版本中,如果 cmake_minimum_required(VERSION)cmake_policy(VERSION) 调用中指定的策略版本低于 2.8.12(可通过 ...<policy_max> 指定),将会产生弃用警告。

另请参阅