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> 部分被忽略,并保留 3.12 之前的行为,即基于 <min> 来确定策略。
此命令会将 CMAKE_MINIMUM_REQUIRED_VERSION 变量设置为 <min>。
选项 FATAL_ERROR 被接受但被 CMake 2.6 及更高版本忽略。应指定它,以便 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 以下版本的兼容性。在 CMake 4.0 及更高版本中,调用未指定至少 3.5 作为其策略版本的 cmake_minimum_required(VERSION) 或 cmake_policy(VERSION)(可选通过 ...<max> 指定)将产生错误。
3.31 版本已更改: 对 CMake 3.10 以下版本的兼容性已弃用。在 CMake 3.31 及更高版本中,调用未指定至少 3.10 作为其策略版本的 cmake_minimum_required(VERSION) 或 cmake_policy(VERSION)(可选通过 ...<max> 指定)将产生弃用警告。
3.27 版本已更改: 对 CMake 3.5 以下版本的兼容性已弃用。在 CMake 3.27 及更高版本中,调用未指定至少 3.5 作为其策略版本的 cmake_minimum_required(VERSION) 或 cmake_policy(VERSION)(可选通过 ...<max> 指定)将产生弃用警告。
3.19 版本已更改: 对 CMake 2.8.12 以下版本的兼容性已弃用。在 CMake 3.19 及更高版本中,调用未指定至少 2.8.12 作为其策略版本的 cmake_minimum_required(VERSION) 或 cmake_policy(VERSION)(可选通过 ...<max> 指定)将产生弃用警告。