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> 版本,并设置 策略版本 (Policy Version)。如果运行的 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()。
策略版本 (Policy Version)¶
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> 指定),将产生弃用警告。