我想用" cmake_minimum_required"来定义CMake的最小版本。设施。 我已经看到一些项目设置了最低版本2.8,其他一些设置为3.0或3.2。 我想了解您对该主题的看法和最佳实践。
答案 0 :(得分:18)
cmake_minimum_required()
函数用于避免由于CMakeLists.txt
假定CMake的更高版本而不是当前主机上安装的版本而导致的任何神秘错误消息。
作为一个例子,早期失败,并有明确的信息......
CMake 3.2 or higher is required. You are running version 2.8.12.2
...比以后的某些更加神秘的东西更受欢迎......
In file included from /home/foouser/src/testprj/string.cpp:1:0:
/home/foouser/src/testprj/string.hpp:94:29: error: ‘std::is_same’ has not been declared
...只是因为在这个例子中,较旧的CMake版本不支持set( CMAKE_CXX_STANDARD 11 )
。我相信你会同意的。
理想的设置是:
与运行旧版本的用户以及脚本的最大兼容性。但它需要测试哪个版本完全它首先支持你的构造。所以它通常归结为:
这对大多数项目来说可能已经足够了。如果你是唯一一个真正参与该项目的人,并且在你的列表上测试CMake兼容性真的低,你可能会最终得到:
一旦其他人试图编译您的项目,后一种方法就会有严重的缺陷。很多人不使用最新版本的一切。特别是在Linux上,默认是使用包管理器为您提供的任何内容。例如,Ubuntu狡猾,目前版本为3.2.2 - 你可能有更高版本,但除非你需要更高版本,否则你不应该 require (因为这意味着如果没有先手动安装较新版本的CMake,人们将无法构建您的项目。)
不要做的是......
原因应该是显而易见的 - 建筑可能会失败,用户不会对出现问题的原因提出任何暗示。