CMAKE:使用 find_package 搜索包时可以排除特定版本吗?

问题描述

一个项目中,我正在搜索带有 find_package 的包。该项目可以使用包的一系列版本 - 除了一个特定版本,它有一个未修复的错误,使其无法使用。

是否可以允许一系列版本而只排除一个版本,例如:

find_package(PACKAGE 1.0.0...1.5.0 EXCEPT 1.4.0 required)

编辑:虽然在仅找到有缺陷的版本时当然可以选择打印出错误消息,但我正在寻找一种解决方案,当在系统上找到多个可能的候选版本时,它只会跳过有缺陷的版本。

解决方法

我找到了一个(有点古怪的)解决方案,它确实有效,但它可能有副作用,这对我的项目来说无关紧要:

find_package(PACKAGE 1.0.0...1.3.999 QUIET)
if (NOT PACKAGE_FOUND)
    find_package(PACKAGE 1.4.1...1.5.0 REQUIRED)
endif()
if (PACKAGE_FOUND)
    message(STATUS "PACKAGE ${PACKAGE_VERSION} found")
endif()
,

一种方法是检查找到的版本并对其采取行动:

find_package(PACKAGE 1.0.0...1.5.0 REQUIRED)
if(${PACKAGE_VERSION} STREQUAL "1.4.0")
    message(FATAL_ERROR "Incompatible version")
endif()