有没有一种简单的方法可以找到 CMake 所需的最低版本?

问题描述

是否有一种方便的方法可以找到最低兼容的 CMake 版本(除了用每个版本进行测试)?我正在寻找一个工具来解析我的 CMakeLists.txt,找到我正在使用的所有功能,查找它们添加的 CMake 版本,并吐出最大值。快速浏览一下 cmake --help 并没有显示执行此操作的选项。是否有外部工具可以为我执行此操作?

解决方法

截至目前,还没有这样的工具。这是因为创建这样的工具存在许多问题。

最重要的是,CMake 从未对向前兼容做出任何承诺。使用 较新 版本的 CMake 创作的列表文件永远不能保证与 较旧 版本一起使用,无论 cmake_minimum_required 设置出现什么。这是由于几个因素造成的:添加了新功能、改进了查找模块和编译器检测中的逻辑等。基本上任何不会破坏旧代码,但使新代码更智能和更健壮的东西,即使没有更改源代码。

因此,仅检查新功能(如生成器表达式)的工具将错过对整个系统其他部分的更改。

这意味着任何此类工具都必须对 CMake 进行如此密切的建模,以便简单地自动运行旧的 CMake 版本并测试构建会更容易。如果你觉得你需要这样做,你应该自己自动化。

退一步说,CMake 非常容易升级,而且您可以通过简单地回避这个问题来为自己和他人省去很多像这样的向后兼容性问题。使用最新版本,将其声明为最低版本并鼓励您的用户升级。在 Linux 上,Kitware 为 x86 和 arm 提供静态链接的可执行文件,除了 libc 之外什么都不需要。我从未听说过这些可执行文件不起作用。我在旧的 Raspberry Pi 上使用它们。我还没有看到任何远程有效的理由来支持超过一年左右的 CMake 版本。