Cmake-cmake_minimum_required()

1. cmake_minimum_required

1.1 命令格式:

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

该命令指定了编译该工程对cmake的最高、最低版本要求,如果 CMake 的运行版本低于所需版本,它将停止处理项目并报告错误。

1.2 参数说明

  • VERSION : 版本号,cmake版本号的形式都为major.minor[.patch[.tweak]],如3.22.0,3.13.5
  • min:指定cmake编译要求的最低版本号
  • max:指定cmake编译要求的最高版本号
  • FATAL_ERROR

1.3 示例

假如当前cmake版本为3.10.2

  1. 仅指定min且大于当前版本
cmake_minimum_required(VERSION 3.21.0)
表示要求cmake最低版本为3.21.0,当前版本为3.10.2,小于指定最低版本,则会停止处理项目并报告错误

执行结果:

	CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  		CMake 3.21.0 or higher is required.  You are running version 3.10.2
	-- Configuring incomplete, errors occurred!
  1. 仅指定min且小于当前版本
camke_minimum_required(VERSION 3.5.0)

表示要求cmake最低版本为3.5.0,当前版本3.10.2,大于min, 则会正常处理项目

执行结果:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/xxx
  1. 指定min小于当前版本,指定max小于当前版本
camke_minimum_required(VERSION 3.1.3...3.1.5)

表示要求cmake最低版本为3.1.3,当前版本3.10.2,大于min, 大于max, 正常处理项目

执行结果:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/xxx
  1. 指定min小于当前版本,max大于当前版本
camke_minimum_required(VERSION 3.1.3...3.10.5)

表示要求cmake最低版本为3.1.3,当前版本3.10.2,大于min, 小于max, 正常处理项目

执行结果:
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/xxx

可以看到,3和4在运行结果上并没有什么区别,即便实际运行版本高于max时,也是正常的,说明max并不是对使用cmake版本的最高版本限制。实际上它影响的是cmake的策略机制。有兴趣的话可以查阅资料了解。在这里先不做陈述。

1.4 注意事项

  1. 我们常常把cmake_minimum_required命令放在顶层CMakeLists.txt的最上边一行,以便在其他命令执行之前调用,这是因为后续的命令可能与版本相关。
  2. 如果在函数内部调用cmake_minimum_required,那么这个命令只在函数内部起作用。

猜你喜欢

转载自blog.csdn.net/mataojie/article/details/121227727