CMake 3.19+中find_package能否仅指定包的最低版本?
在CMake 3.19+中仅指定包最低版本的实现方式
完全可以。CMake 3.19及以上版本引入了更灵活的版本范围语法,你想要的find_package(LLVM 11... REQUIRED)写法是官方支持的,它的作用就是仅要求LLVM的版本不低于11.0,不设置任何最高版本限制。
关键细节:
- 版本范围语法里的
...后缀明确表示「最低版本为指定值,无上限」,等价于语义上的>=11.0版本要求 - 该写法会让CMake在查找包时,优先匹配版本≥11的可用包,找到符合最低要求的包即完成查找(可通过
PREFER_NEWEST选项调整为优先选最新版本,但默认逻辑是找到第一个符合条件的) - 此功能生效的前提是目标包的CMake配置文件(比如
LLVMConfig.cmake)正确实现了版本检测逻辑——包括LLVM在内的多数主流开源项目的配置文件都支持这一点
示例代码:
# 要求LLVM版本不低于11,无最高版本限制 find_package(LLVM 11... REQUIRED)
如果使用CMake 3.19以下版本,只能用find_package(LLVM 11 REQUIRED),这种写法实际逻辑也是接受≥11的版本,但11...的写法更清晰明确,是CMake官方推荐的仅指定最低版本的标准方式。
内容的提问来源于stack exchange,提问作者SolidMechanicsFan
相关产品推荐
相关产品推荐

